2015-07-01 13 views
7

Java numaralı array'daki tüm öğelerin farklı olup olmadığını kontrol edebilmem için önceden tanımlı herhangi bir işlevi var mı? Veya bulmak için sıfırdan bir işlev yazmam gerekiyor mu? Bir Dizinin Öğelerinin Hepsi Farklı Olduğunu Nasıl Kontrol Edilir

aşağıda bir dize array var:

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

LinkedHashSet sadece unque unsurları tutar. Yani, böyle yapın, Set arrToSet = new LinkedHashSet (Arrays.asList (hands)); VEYA Koleksiyon arrToSet = new LinkedHashSet (Arrays.asList (arr)); –

+0

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

+0

Farklı tanımlayın. Farklı değerler? Farklı nesneler? Eğer örnek kod dizeleri hakkında soran iseniz, harf duyarlı karşılaştırma önemsiyorsun? –

cevap

3

Nasıl HashSet kullanılarak ve orijinal dizinin uzunluğu HashSet boyutunu karşılaştırma hakkında?
HashSet çiftleri kurtulur, böylece boyut dizisi uzunluğu aynı ise, o tüm dizi elemanları farklı olduğunu anlamına gelecektir.

Örnek:

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

Çıktı:

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

Hayır, yok böyle bir yöntem, ama yazmak çok kolay bir:

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

aksine diğer yöntemlerde sunulan cevaplar, bir kopyası bulunduğunda kısa devre olacaktır. oldukça tüm dizi geçmekte ve sonunda boyutlarını karşılaştırmak yerine, bir yinelenen bulur olarak

+0

Bu gerçekten düzgün bir çözüm! :) – Gosu

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

en kısa sürede durdurur. Kavramsal olarak Misha's answer ile aynıdır, ancak Java 8 özelliklerini (akışları ve yöntem referanslar) kullanılarak daha yüksek bir seviyede çalışan.

İlgili konular