Ich habe ein List
deklariert als:
Dieser List
enthält mehrere Arrays von String
s.
Ich muss überprüfen, ob ein String[]
, das ich habe, in diesem ArrayList<String[]>
enthalten ist.
Ich wiederhole gerade die ArrayList
und vergleiche jedes String[]
mit dem, nach dem ich suche:
Gibt es eine bessere Möglichkeit zu überprüfen, ob ein ArrayList<String[]>
ein bestimmtes String[]
enthält?
Array.equals()
ist die effizienteste Methode afaik . Diese Methode allein bedeutete für den Zweck und optimiert so wenig wie es in der aktueller Status der Implementierung, der eine einzelne for
-Schleife ist.
Gehen Sie einfach dafür.
Ich stimme der Antwort von Rod_Algonquin zu, aber es gibt einen anderen Weg, es zu tun. Schreiben Sie einfach Ihre eigene Klasse, die Ihr Array umhüllt, und implementieren Sie eine benutzerdefinierte equals- und hashCode-Methode und lassen Sie sie Arrays.equals () und Arrays.hashCode () zurückgeben. Mit diesem Ansatz können Sie Ihre Objekte in einer Liste speichern und enthält Prüfungen der Liste direkt.
%Vor%Dies wird gedruckt
%Vor% Ich würde wahrscheinlich nach einer Lösung suchen, in der Sie String[]
Objekte nicht direkt in Ihrer Liste speichern. Das würde wahrscheinlich bedeuten, eine Art von sinnvoller Klasse zu erstellen, die intern String[]
speichern könnte, oder es könnte bedeuten, dass Sie einfach zu ArrayLists anstelle von Arrays wechseln. Ohne den Kontext zu kennen, ist das Beste, was ich vorschlagen kann, sie mit Listen zu umhüllen, die Arrays.asList
Dies gibt Ihnen nützliche Methoden hashCode
und equals
, mit denen Sie ArrayList.contains
oder sogar HashSet
s verwenden können, wenn die Eindämmungstests von vorrangiger Bedeutung sind:
ArrayList.contains
wird nicht schneller sein als das, was Sie gerade tun, und alle Arrays.asList
-Aufrufe sind wahrscheinlich ziemlich wortreich, aber HashSet.contains
hat das Potenzial, viel schneller zu sein als das, was Sie sind tun.
List.contains(Object)
ist mit Listen von Arrays gebrochen, also warum nicht Listen von Listen verwenden?
Sie können ein Array einfach in eine Liste mit Arrays.asList(T... a)
.
Tags und Links string java arrays collections