我想知道两件事。
1) HashSet 对添加的重复值有什么作用?我相信它取代了价值?如果是这样的话,LinkedHashSet 呢?我很确定它不会改变顺序,所以它仍然会替换值吗?(为什么会这样?)
2) 如果我想使用一个不允许重复的有序集合,但是用它的重复值替换现有值,从而重新排序位置怎么办?IE。它就像一个 LinkedHashSet,除了添加的重复值将被替换并更新它们的位置。有没有一个集合可以做到这一点?还是我必须自己写?我不想自己写!
我想知道两件事。
1) HashSet 对添加的重复值有什么作用?我相信它取代了价值?如果是这样的话,LinkedHashSet 呢?我很确定它不会改变顺序,所以它仍然会替换值吗?(为什么会这样?)
2) 如果我想使用一个不允许重复的有序集合,但是用它的重复值替换现有值,从而重新排序位置怎么办?IE。它就像一个 LinkedHashSet,除了添加的重复值将被替换并更新它们的位置。有没有一个集合可以做到这一点?还是我必须自己写?我不想自己写!
1) 将副本添加到 Set 中不会做任何事情(它立即返回 false,并且 Set 的内容不受影响),无论具体实现如何,无论是 HashSet、TreeSet 还是 LinkedHashSet。
2) 查看 LinkedHashMap,它可能是最接近您想要的。它有一个构造函数的布尔参数,可让您指定是否希望它使用“插入顺序”(假)或“访问顺序”。前者与 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"