如何保持哈希表中元素的顺序

2022-09-01 18:43:00

我有一个哈希表。values() 方法以与 i 插入的顺序不同的顺序返回值。如何以与插入相同的顺序获取值?使用LinkedHashmap是一种替代方法,但它不是同步的。


答案 1

使用LinkedHashMap

哈希表和链表实现接口,具有可预测的迭代顺序。此实现的不同之处在于,它维护一个贯穿其所有条目的双链表。此链表定义迭代顺序,这通常是将键插入到映射中的顺序(插入顺序)。请注意,如果将键重新插入到地图中,广告订单不受影响。(如果调用时,键 k 将重新插入到映射 m 中,此时将在调用前立即返回。MapHashMapm.put(k, v)m.containsKey(k)true

Collections.synchronizedMap() 结合使用。

例如:

Map<String, String> map = Collections.synchronizedMap(
  new LinkedHashMap<String, String>());

答案 2

您可以包装并同步,也可以使用该实用程序创建同步的LinkedHashMapLinkedHashMapCollections.synchronizedMap

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

来自 JavaDoc:

如果多个线程同时访问链接的哈希映射,并且至少有一个线程在结构上修改了映射,则必须在外部同步该映射。这通常是通过对自然封装映射的某些对象进行同步来实现的。如果不存在此类对象,则应使用 Collections.synchronizedMap 方法“包装”映射。这最好在创建时完成,以防止意外地不同步访问地图