我想知道两件事。
1)HashSet对添加的重复值有什么作用?我相信它取代了价值? 如果是这种情况,那么LinkedHashSet呢?我很确定它不会改变订单,它还能取代价值吗? (为什么会这样?)
2)如果我想使用不允许重复的有序集合,但是用它重复替换现有值,从而重新排序该位置,该怎么办? IE浏览器。它就像一个LinkedHashSet,除了添加的重复值将被替换并更新它们的位置。 有没有可以这样做的集合?或者我必须自己写吗?我不想写自己的作品!
答案 0 :(得分:1)
1)将副本添加到Set中不会做任何事情(它会立即返回false,并且Set的内容不受影响),无论特定的实现如何,无论是HashSet,TreeSet还是LinkedHashSet。
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"