java - 是否可以为 HashMap 集创建队列?

标签 java data-structures collections queue hashmap

现在我正在尝试创建一个生产者/消费者线程,生产者线程遍历所有可能的字母组合并创建它们各自的 MD5 哈希值。然后将每个组合及其哈希放入 HashMap<String,String> .现在在我的消费者线程中,我希望能够使用 Queue<> HashMap 上的集合,因此我的消费者线程可以调用 poll()等从而删除值 atc 像 Queue但在调用 poll() 时仍然让我能够看到组合及其哈希值我该怎么做呢?我有 HashMap但不知道如何“制作”或将其转换为队列。 谢谢。

最佳答案

如果不处理代码的线程安全,您不应该使用 HashMap。否则,您可能会以活锁结束。

为了能够按照插入键的顺序迭代您的 map ,您可以使用 LinkedHashMap。

Map m = Collections.synchronizedMap(new LinkedHashMap(...));

生产者会像这样推送条目(没什么特别的):

m.put(key, object)

消费者会像这样轮询条目:

while (someCondition) {
    Map.Entry nextEntry = null;

    // This block is equivalent to polling
    {
         synchronized(s) {
             Iterator i = s.iterator(); // Must be in the synchronized block
             if (i.hasNext()) {
                 nextEntry  = i.next();
                 i.remove();
             }
         }
    }

    if (nextEntry != null) {
         // Process the entry
         ...
    } else {
         // Sleep for some time
         ...
    }
    // process
}

关于java - 是否可以为 HashMap 集创建队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11107433/

相关文章:

java - 从静态方法调用 super 方法

java - 生成 1 到 99 之间的随机数?

java - 如何在 Java 的字符串格式化程序中格式化时间和字符串值

java - 在 Java 中返回一个可迭代列表

scala - 获取 Scala 中 List[Option] 中具有值的所有条目

collections - Groovy 集合 : Transform List of Lists in a Map

java - 在纹理中切割一个半透明的正方形

python - 双端队列和循环缓冲区有什么区别?

java - 可以维护插入顺序,过滤掉重复元素并轻松删除第一个元素的数据结构?

java - 有一个可以动态更改顺序的 Java Comparator 可以吗?