2013-02-13 21 views
29

Mam tablicę o nazwie "Bob", która zawiera wartości.Android - Sprawdź, czy wartość istnieje w tablicy

String[] bob = { "this", "is", "a", "really", "silly", "list" }; 

Skąd mogę wiedzieć, czy „głupie” wartość istnieje w tablicy o nazwie bob bez iteracja to?

+0

Ważne jest, aby Rozumiem, kiedy po raz pierwszy uczymy się programowania Androida, że ​​twoje pytanie może być po prostu pytaniem Java, które nie jest specyficzne dla Androida. Tak jest w tym przypadku :) – Richard

Odpowiedz

89

Można użyć metody List#contains. W tym celu musisz przekonwertować tablicę na listę. Można użyć Arrays#asList() metodę fot że:

String[] bob = { "this", "is", "a", "really", "silly", "list" }; 

if (Arrays.asList(bob).contains("silly")) { 
    // true 
} 
+2

W tym przypadku możesz zmienić 'Arrays.asList (bob)' na 'Collections.singletonList (bob)' = mniej pamięci. –

5

Convert Array do listy za pomocą statycznego Arrays.asList(T) i sprawdzić z List.contains(Object) aby sprawdzić, czy obiekt istnieje w retuned kolekcji.

String[] bob = { "this", "is", "a", "really", "silly", "list" }; 
      System.out.println(Arrays.asList(bob).contains("silly")); 

Tradycyjny sposób jednak polega na iteracji po tablicy i sprawdzeniu każdego elementu za pomocą equals().

3

Jeśli masz zamiar to sprawdzić wiele może się okazać, że bardziej efektywne używanie HashSet:

String[] bob = { "this", "is", "a", "really", "silly", "list" }; 
Set<String> silly = new HashSet<String>(Arrays.asList(bob)); 
boolean isSilly = silly.contains("silly"); 
2

Oto prosty sposób, aby to zrobić:

ArrayList list = new ArrayList(Arrays.asList(bob)); 
    if (list.contains("silly")) { 
        // my array has silly ! 
      } 

Chodzi o to, przekonwertować tablicę do obiektu ListArray. , ale zużyje dodatkową pamięć, więc upewnij się, że warto, zanim go użyjesz.

Edit

Jeśli jesteś po peformance i zapisywania pamięci można użyć binarnego przeszukiwania algorthem Zamiast: ten sposób nie trzeba przydzielić nowe obiekty:

Arrays.sort(array) 
int value = Arrays.binarySearch(array, "silly"); 
if (value != -1) { 
// my array has silly ! 
} 
+0

Jeśli szukam "silly1" daje mi to zły wynik .. Mówi, że istnieje – user2065795

+0

Arrays.binarySearch używa tej samej metody porównania, która jest używana w list.contais .... object.equals (..), więc proszę upewnij się, że twój test jest dokładny ... –

Powiązane problemy