2015-07-01 24 views
7

È la loro funzione predefinita in Java in modo che sia possibile verificare se tutti gli elementi in un array sono diversi? O devo scrivere una funzione da zero per trovarla?Come verificare se gli elementi di una matrice sono tutti diversi Java

Ho una stringa array di seguito:

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

LinkedHashSet contiene solo elementi unque. Quindi, fai così, imposta arrToSet = new LinkedHashSet (Arrays.asList (hands)); Collezione OR arrToSet = new LinkedHashSet (Arrays.asList (arr)); –

+0

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

+0

Definisci diversi. Valori diversi? Oggetti diversi? Se stai chiedendo specificamente le stringhe nel codice di esempio, ti interessa il confronto tra maiuscole e minuscole? –

risposta

3

Come sull'utilizzo di un HashSet e confrontando le dimensioni del HashSet con la lunghezza della matrice originale?
HashSet elimina i duplicati, quindi se la dimensione è uguale alla lunghezza dell'array, significa che tutti gli elementi dell'array sono diversi.

Esempio:

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!"); 
     } 
    } 
} 

uscita:

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

No, non c'è tale metodo, ma è molto facile scrivere uno:

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

differenza metodi offerti in altri risposte, questo andrà in corto circuito una volta trovato un duplicato.

+0

Questa è una soluzione davvero carina! :) – Gosu

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

Arresta non appena trova un duplicato, piuttosto che attraversare l'intero array e confrontare le dimensioni alla fine. Concettualmente lo stesso di Misha's answer, ma lavorando su un livello superiore utilizzando le funzionalità di Java 8 (flussi e riferimenti al metodo).

Problemi correlati