Der beste Weg um zu überprüfen, ob ListString [] einen String [] [duplicate] enthält

8

Ich habe ein List deklariert als:

%Vor%

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:

%Vor%

Gibt es eine bessere Möglichkeit zu überprüfen, ob ein ArrayList<String[]> ein bestimmtes String[] enthält?

    
Swadeesh 21.08.2014, 07:01
quelle

4 Antworten

9

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.

    
ꜱᴜʀᴇꜱʜ ᴀᴛᴛᴀ 21.08.2014, 07:09
quelle
6

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%     
CalibeR.50 21.08.2014 07:49
quelle
1

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

%Vor%

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:

%Vor%

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.

    
user2357112 21.08.2014 07:17
quelle
1

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) .

%Vor%     
Francesco Menzani 21.08.2014 07:34
quelle

Tags und Links