0

我只是试图获得添加效果,ConcurrentHashMap<String,String>但元素顺序是混合的。代码就像...

ConcurrentHashMap<String,String>h=new ConcurrentHashMap<String,String>();

        for(int i=0; i<10; i++)
        {           
            h.put(""+Math.random(), ""+i);

        }

        Iterator<String> iterator=h.values().iterator();
        while(iterator.hasNext())
        {
            System.out.println(iterator.next());
        }

...在控制台中给出下一个值:

9
4
6
2
0
5
1
7
3
8

……所以我的问题是……

如果键是一些随机字符串,有没有办法让 ConcurrentHashMap 获取原始元素的顺序?

谢谢

4

2 回答 2

11

改用LinkedHashMap它将保留插入顺序

Map 接口的哈希表和链表实现,具有可预测的迭代顺序。

并使用

Collections.synchronizedMap(mapInstance)

Collections.synchronizedMap(mapINstance);

 Map<K,V> map = Collections.synchronizedMap(new LinkedHashMap());
于 2012-10-11T18:27:56.347 回答
1

LinkedHashMap维护插入顺序。

Map 接口的哈希表和链表实现,具有可预测的迭代顺序。此实现与 HashMap 的不同之处在于它维护一个双向链表,该列表贯穿其所有条目。这个链表定义了迭代顺序,通常是键插入映射的顺序(插入顺序)。请注意,如果将键重新插入到地图中,则插入顺序不会受到影响。

于 2012-10-11T18:28:38.577 回答