我需要一个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);
}
但是看起来这个比较器失败了,因为集合打印出来的是:
[b, c, a, b, d]。如果b出现两次,那么它就不是一个集合了。
还有其他的替代方案吗?