2017-09-11 4 views
-2

何が問題ですか?出力に値がない。重複した値を出力するはずです。Javaでリストに重複する用語を取得しています

HashSet<Integer> hs=new HashSet(); 
hs.addAll(a); 
List<Integer> b=new ArrayList(); 
a.removeAll(hs); 
System.out.println(a); 
+1

この中でやってB' '変数とは何ですか?それは意味がないようです。 –

+1

あなたは文字通りaからすべての要素を削除しました。もちろん、aは空です。 – Assafs

+0

*しかし、重複した値を印刷する必要があります。* - それはなぜですか?以前に重複していた値が印刷されるはずですか? – luk2302

答えて

0

私はあなたがa.removeAll(hs);は高々一度すべての要素を削除することを考えて疑い(aArraylistです)。そうではありません。 the docs状態として:

[...]この呼び出しが戻った後、このコレクションでもhs.addAll(a);かかわらを含むセットをもたらすことを意味し、指定されたコレクション

と共通の要素が含まれていません潜在的により小さい値a(重複がありません)を呼び出すと、a.removeAll(hs)を呼び出しても、元の値と重複がすべて削除されます。

removeAllのソースコードは、それが天気をかaをチェックにわたって繰り返し処理としてaの要素がhsであり、その場合はaから削除することを検証します。 hsを反復処理せず、aの一致する要素を削除します。あなたが使用することができますどのようなSource grepcode

0

removeIfです:

List<Integer> a = new ArrayList<>(Arrays.asList(1,1,1,1,1,1,2,2,3,3,4,5,6,6,7)); 

Map<Integer, List<Integer>> counter = a.stream().collect(Collectors.groupingBy(i -> i)); 
a.removeIf(v -> counter.get(v).size() == 1); 
System.out.println(new HashSet<Integer>(a)); //[1, 2, 3, 6]