2015-07-01 10 views
7

Czy jest ich dowolna predefiniowana funkcja w Java, dzięki czemu mogę sprawdzić, czy wszystkie elementy w array są różne? Czy muszę napisać funkcję od zera, aby ją znaleźć?Jak sprawdzić, czy elementy tablicy są wszystkie Różne Java

Mam String array poniżej:

String[] hands = {"Zilch", "Pair", "Triple", "Straight", "Full House"}; 
+0

LinkedHashSet przechowuje tylko elementy unikalne. Tak, zrób to, Set arrToSet = new LinkedHashSet (Arrays.asList (ręce)); OR Collection arrToSet = new LinkedHashSet (Arrays.asList (arr)); –

+0

http://stackoverflow.com/questions/203984/how-do--remove-repeated-elements-crom-arraylist –

+0

Definiuj różne. Różne wartości? Różne obiekty? Jeśli pytasz konkretnie o ciągi w kodzie przykładowym, czy interesuje Cię porównywanie wielkości liter? –

Odpowiedz

3

Jak o użyciu HashSet i porównując wielkość Hashset z długością oryginalnej tablicy?
HashSet pozbywa się duplikatów, więc jeśli rozmiar jest taki sam jak długość tablicy, będzie to oznaczać, że wszystkie elementy tablicy są różne.

Przykład:

import java.util.Arrays; 
import java.util.HashSet; 

public class QuickTester { 

    public static void main(String[] args) { 

     String[] hands = new String[]{"Zilch", "Pair", "Triple", 
       "Straight", "Full House"}; 

     HashSet<String> hs = new HashSet<>(Arrays.asList(hands)); 

     if(hs.size() == hands.length) { 
      System.out.println("All elements in array are different!"); 
     } 
     else { 
      System.out.println("Duplicates found in array!"); 
     } 

     hands = new String[]{"Banana", "Apple", "Orange", 
       "Banana"}; 

     hs = new HashSet<>(Arrays.asList(hands)); 

     if(hs.size() == hands.length) { 
      System.out.println("All elements in array are different!"); 
     } 
     else { 
      System.out.println("Duplicates found in array!"); 
     } 
    } 
} 

wyjściowa:

All elements in array are different! 
Duplicates found in array! 
3

Nie, nie ma takiej metody, ale jest to bardzo łatwe do napisania jeden:

static boolean allUnique(String[] strings) { 
    HashSet<String> set = new HashSet<>(); 
    for (String s : strings) { 
     if (! set.add(s)) { 
      return false; 
     } 
    } 
    return true; 
} 

przeciwieństwie metody oferowane w innych odpowiedzi, spowoduje to zwarcie po znalezieniu duplikatu.

+0

To naprawdę miłe rozwiązanie! :) – Gosu

6
boolean noDupes(Object[] array) { 
    return Arrays.stream(array).allMatch(new HashSet<>()::add); 
} 

Zatrzymuje jak tylko stwierdzi duplikatu zamiast przechodzenia przez całą tablicę i porównując rozmiary na końcu. Koncepcyjnie to samo, co Misha's answer, ale działające na wyższym poziomie przy użyciu funkcji Java 8 (strumienie i odwołania do metod).

Powiązane problemy