假设我有一个哈希图,看起来像:
键:值
(字符串 1,队列 1)
(字符串 2,队列 2)
(字符串 3,队列 3)
我还有一个将访问此哈希图的同步方法,并在该方法内部创建了一个迭代器:
Iterator it = hashmap.iterator();
while(it.hasNext()){
Queue q = it.next();
QueueItem item = q.get(0);
return item;
}
现在我有 2 个线程调用此方法,当线程 1 调用时,它将获得一个指向(字符串 1、队列 1)的迭代器;我的问题是当线程 2 调用时,迭代器会指向(字符串 1,队列 1)还是(字符串 2,队列 2)?
调用 iterator() 会创建一个位于集合开头的新迭代器,因此它将始终为您提供 Map 实现的第一个条目。
使用 HashMap 时,排序是未定义的,但您可以使用其他 Map 实现来控制排序(LinkedHashMap、TreeMap 等)