我有一个旧应用程序,其中使用 ConcurrentHashMap。现在我们知道并发HasMap 是无序的,但是需要读取最初插入的对象。我已经在生产中使用了一段时间的代码,因此我正在寻找快速替代方案来替换该集合,并且也可以给我订购。基本上寻找一种非常非侵入性的解决方案,从而最大限度地减少代码更改。我在网上搜索并找到了 ConcurrentSkipListMap 作为替代方案,但它对我不起作用。原因是,默认情况下它按照键的自然顺序进行排序,这对我不起作用。由于我的键是字符串,因此我需要根据插入进行排序,而不是根据字符串键在映射中的自然排序方式进行排序。
请尽早提出一些替代方案。
谢谢 阿努巴夫
最佳答案
您应该能够使用 LinkedHashMap
来保留插入顺序,并使用 Collections.synchronizedMap(Map map)
方法使其同步
.
public class Test {
Map<String, String> map = new LinkedHashMap<>();
Map<String, String> test = Collections.synchronizedMap(map);
public void test() {
test.put("Z", "Zed");
test.put("A", "Ay");
for (String s : test.keySet()) {
System.out.println(s);
}
}
public static void main(String args[]) {
try {
new Test().test();
} catch (Throwable t) {
t.printStackTrace(System.err);
}
}
}
打印:
Z
A
按照您的要求。
关于java - 有序(自然插入顺序)和线程安全的 Java Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16835795/