【问题标题】: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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    • 2010-10-14
    • 1970-01-01
    • 2023-03-17
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多