どのように削除されているか知る方法HashSet?Java - 何が削除されたのか知る方法HashSet?
私が持っている配列int [] x = {2, 4, 4, 5};
私はそれをひそかとき、HashSet<Integer> set = new HashSet<Integer>(Arrays.asList(x));
どのように私は何の要素がset
にx
から排除されている知っていますか?
どのように削除されているか知る方法HashSet?Java - 何が削除されたのか知る方法HashSet?
私が持っている配列int [] x = {2, 4, 4, 5};
私はそれをひそかとき、HashSet<Integer> set = new HashSet<Integer>(Arrays.asList(x));
どのように私は何の要素がset
にx
から排除されている知っていますか?
その代わりにコンストラクタを使用しての、あなたが使用できます。別に
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);
}
}
さて、 'set.add'はブール値を返しますか? –
はい、成功の場合は 'true'を返し、そうでない場合は' false'を返します。 –
@TilakMadichetti:確認するドキュメントを見て戻り値を理解しましたか? (スタックオーバフローは、ドキュメントを読んでいる代わりのものではありません。) –
をジョンスキートは言及したものから、あなたは一般的な何かを探しているなら、ここで私の可能なアプローチは、以下のとおりです。
例:オブジェクトは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;
}
}
私は気づいていないのだはるかにエレガントかつ簡潔な解決策があると願っています。
第1または第2の「4」は、それらが等しくなるにつれて除去されたとは言えません。 –
いいえ、この場合は "4" @PeterLawrey –
が必要です。それらを追加するときにチェックしてください、Jon Skeetの答えを見てください。注:例えば3つの4つがある場合、重複した重複を取得することができます。 –