gpt4 book ai didi

java - 如何实现维护插入顺序的并发 Set

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:25:34 24 4
gpt4 key购买 nike


我需要一个 Set 实现,它可以让我保持插入顺序并且仍然可以同时修改(如不抛出 ConcurrentModificationException)。

我尝试将 ConcurrentSkipListSet 与我自己的比较器一起使用 - 示例代码:

public static void main(String[] str){
ConcurrentSkipListSet set = new ConcurrentSkipListSet(new Comparator() {

public int compare(Object o1, Object o2) {
if(o1.equals(o2)){
return 0;
}
return -1;
}
});
set.add("d");
set.add("b");
set.add("a");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
set.add("c");
set.add("b");

System.out.println(set);
set.remove("b");
System.out.println(set);
}

但看起来这个比较器是#fail 因为集合打印:
[b, c, a, b, d] 。如果 b 在那里两次,它就没有集合。
我应该考虑其他替代方案吗?

最佳答案

您定义了一个不遵守 total order property 的比较器.对于两个对象,一个应该比另一个小,或者另一个比第一个小。

在您的情况下,如果对象不相等,则每个对象都比另一个小。

由于您正在实例化 ConcurrentSkipListSet如果没有任何类型参数说明集合中元素的类型,除非使用强制转换,否则定义比较器会遇到麻烦。但是如果你创建一个 new ConcurrentSkipListSet<String> , 定义比较器会更容易,因为你会知道你的对象是字符串。

关于java - 如何实现维护插入顺序的并发 Set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6455885/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com