java - 有序(自然插入顺序)和线程安全的 Java Map

标签 java multithreading dictionary java.util.concurrent

我有一个旧应用程序,其中使用 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/

相关文章:

java - Linux 上的多个 Java webapps 总线程限制

c# - 调用另一个线程函数然后返回值

c - 如何使用 OpenMP 将每个线程的输出返回到数组中?

c# - 如何遍历包含多个键的字典列表,并更改不同的键值?

c++ - 如何将结构作为键插入 map ?

python - 具有可散列键的自定义字典无法处理递归结构

java - 鼠标离开时菜单颜色变化

java - 简单扫描字符串解析任务失败

java - 更改我的程序接受文件的方式将会产生来自 GSON : Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $? 的错误

java - 如何使用 long 和 int 数据类型更新进度条的进度(使用 0-100 整数)?