【问题标题】:Is there a LinkedHashSet / Map equivalent, with order preserved for inserted duplicates?是否有 LinkedHashSet / Map 等价物,并为插入的重复项保留顺序?
【发布时间】:2014-11-19 15:20:22
【问题描述】:
我想知道两件事。
1) HashSet 如何处理添加的重复值?我相信它取代了价值?
如果是这样的话,LinkedHashSet 呢?我很确定它不会改变顺序,所以它仍然会替换值吗? (为什么会这样?)
2) 如果我想使用一个不允许重复的有序集合,但会用它的重复值替换现有值,从而重新排序位置怎么办?
IE。它就像一个 LinkedHashSet,除了添加的重复值将被替换并更新它们的位置。
有没有一个集合可以做到这一点?还是我必须自己写?我不想自己写!
【问题讨论】:
标签:
java
linked-list
duplicates
linkedhashset
【解决方案1】:
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"