2016-05-29 14 views
0

どのように削除されているか知る方法HashSet?Java - 何が削除されたのか知る方法HashSet?

私が持っている配列int [] x = {2, 4, 4, 5};

私はそれをひそかとき、HashSet<Integer> set = new HashSet<Integer>(Arrays.asList(x));

どのように私は何の要素がsetxから排除されている知っていますか?

+0

第1または第2の「4」は、それらが等しくなるにつれて除去されたとは言えません。 –

+0

いいえ、この場合は "4" @PeterLawrey –

+0

が必要です。それらを追加するときにチェックしてください、Jon Skeetの答えを見てください。注:例えば3つの4つがある場合、重複した重複を取得することができます。 –

答えて

5

その代わりにコンストラクタを使用しての、あなたが使用できます。別に

Set<Integer> set = new HashSet<>(); 
for (int value : x) { 
    if (!set.add(value)) { 
     // Or whatever you want to do 
     System.out.println("Detected a duplicate... " + value); 
    } 
} 
+0

さて、 'set.add'はブール値を返しますか? –

+0

はい、成功の場合は 'true'を返し、そうでない場合は' false'を返します。 –

+3

@TilakMadichetti:確認するドキュメントを見て戻り値を理解しましたか? (スタックオーバフローは、ドキュメントを読んでいる代わりのものではありません。) –

1

をジョンスキートは言及したものから、あなたは一般的な何かを探しているなら、ここで私の可能なアプローチは、以下のとおりです。

  1. する検索します配列の重複は、HashSetから削除された値と見なすことができます。しかし、実際にはHashSetで何もする必要はありません。

例:オブジェクトはHashSetの中に既に存在する場合、それはリストに追加されるように

Arrays.sort(myArray); 
for (int i = 1; i < myArray.length; ++i) { 
    if (0 == myComparator.compare(myArray[i - 1], myArray[i])) { 
    // Found a duplicate. Store/print it 
    } 
} 
  • HashSetクラスを拡張し、add(Object obj)メソッドをオーバーライド
      が削除されたアイテムのもちろん、 HashSetを使用する場合は、このカスタム HashSetを使用する必要があります。

    例:

    public MyHashSet extends HashSet<E> { 
    List<E> removedAsDuplicateItems = new ArrayList<>(); 
    
    @Override 
    public boolean add(E e) { 
        boolean isNewItem = map.put(e, PRESENT)==null; 
        if(!isNewItem) removedAsDuplicateItems.add(e); 
        return isNewItek; 
    } 
    
    public List<E> removedAsDuplicateItems() { 
        return removedAsDuplicateItems; 
    } 
    } 
    

    私は気づいていないのだはるかにエレガントかつ簡潔な解決策があると願っています。

  • 関連する問題