0

私は2つのことを疑問に思っていました。

1) HashSet は追加された重複値で何をしますか? 私はそれが値を置き換えると思いますか?その場合、LinkedHashSet はどうでしょうか。私はそれが順序を変更しないと確信しているので、それでも値を置き換えますか? (なぜだろう?)

2) 重複を許可しない順序付けられたコレクションを使用したいが、既存の値を重複で置き換えて、位置を並べ替えたい場合はどうすればよいですか? すなわち。追加された重複した値が置き換えられ、それらの位置が更新されることを除いて、LinkedHashSet に似ています。これを行うコレクションはありますか?それとも自分で書く必要がありますか?自分で書く必要はありません!

4

1 に答える 1

1

1) HashSet、TreeSet、LinkedHashSet のいずれであっても、特定の実装に関係なく、Set に複製を追加しても何も起こりません (すぐに false が返され、Set の内容は影響を受けません)。

2)LinkedHashMapをチェックしてください。おそらく、あなたが望むものに最も近いでしょう。コンストラクターへのブール引数があり、「挿入順序」(false) または「アクセス順序」のどちらを使用するかを指定できます。前者は LinkedHashSet と同じです。後者は、キーを再挿入したり検索したりすると、キーが「バンプ」します。

Map<String, Integer> map = new LinkedHashMap(10, 0.75, true);
map.put("foo", 1); map.put("bar", 2);
System.out.println(map.keySet().iterator().next()); // prints "bar"
map.put("foo", 1); 
System.out.println(map.keySet().iterator().next()); // prints "foo"
map.get("bar");
System.out.println(map.keySet().iterator().next()); // prints "bar"
于 2014-11-19T15:37:26.110 に答える