如何保持哈希表中元素的顺序
2022-09-01 18:43:00
我有一个哈希表。values() 方法以与 i 插入的顺序不同的顺序返回值。如何以与插入相同的顺序获取值?使用LinkedHashmap是一种替代方法,但它不是同步的。
我有一个哈希表。values() 方法以与 i 插入的顺序不同的顺序返回值。如何以与插入相同的顺序获取值?使用LinkedHashmap是一种替代方法,但它不是同步的。
哈希表和链表实现接口,具有可预测的迭代顺序。此实现的不同之处在于,它维护一个贯穿其所有条目的双链表。此链表定义迭代顺序,这通常是将键插入到映射中的顺序(插入顺序)。请注意,如果将键重新插入到地图中,广告订单不受影响。(如果调用时,键 k 将重新插入到映射 m 中,此时将在调用前立即返回。
Map
HashMap
m.put(k, v)
m.containsKey(k)
true
与 Collections.synchronizedMap()
结合使用。
例如:
Map<String, String> map = Collections.synchronizedMap(
new LinkedHashMap<String, String>());
您可以包装并同步,也可以使用该实用程序创建同步的LinkedHashMap
:LinkedHashMap
Collections.synchronizedMap
Map m = Collections.synchronizedMap(new LinkedHashMap(...));
来自 JavaDoc:
如果多个线程同时访问链接的哈希映射,并且至少有一个线程在结构上修改了映射,则必须在外部同步该映射。这通常是通过对自然封装映射的某些对象进行同步来实现的。如果不存在此类对象,则应使用 Collections.synchronizedMap 方法“包装”映射。这最好在创建时完成,以防止意外地不同步访问地图