Java 如何保持哈希表中元素的顺序
我有一个哈希表。values()方法以与插入顺序不同的顺序返回值。如何以与插入顺序相同的顺序获取值?使用LinkedHashmap是一种替代方法,但它不同步。哈希表本身就是无序的,因此您使用的数据结构错误。由于您没有指定所使用的语言,因此我无法建议其他语言,但您需要某种类型的有序键/值集。请使用 哈希表和链表 实现Java 如何保持哈希表中元素的顺序,java,hashtable,linkedhashmap,Java,Hashtable,Linkedhashmap,我有一个哈希表。values()方法以与插入顺序不同的顺序返回值。如何以与插入顺序相同的顺序获取值?使用LinkedHashmap是一种替代方法,但它不同步。哈希表本身就是无序的,因此您使用的数据结构错误。由于您没有指定所使用的语言,因此我无法建议其他语言,但您需要某种类型的有序键/值集。请使用 哈希表和链表 实现Map接口, 具有可预测的迭代顺序。这 实现不同于中的HashMap 它维护一个双链接列表 正在运行它的所有条目。 这个链表定义了迭代 订购,这通常是订单 其中键被插入到 映射(插入顺
Map
接口,
具有可预测的迭代顺序。这
实现不同于中的HashMap
它维护一个双链接列表
正在运行它的所有条目。
这个链表定义了迭代
订购,这通常是订单
其中键被插入到
映射(插入顺序)。注意
如果
键被重新插入到地图中。(一)
如果出现以下情况,则将k键重新插入地图m中
m.put(k,v)
在
m.containsKey(k)
将返回true
在调用之前。)
结合
例如:
Map<String, String> map = Collections.synchronizedMap(
new LinkedHashMap<String, String>());
Map Map=Collections.synchronizedMap(
新建LinkedHashMap());
我很确定哈希表未排序的原因是为了提高存储和检索速度。因此,我建议使用外部结构来维护顺序,并仅使用哈希表来存储值(用于快速查找)。您可以包装LinkedHashMap
并进行同步,也可以使用集合。synchronizedMap
实用程序创建同步:
从JavaDoc:
如果多个线程同时访问链接的哈希映射,并且至少有一个线程在结构上修改映射,则必须在外部对其进行同步。这通常是通过在自然封装贴图的某个对象上进行同步来实现的。如果不存在此类对象,则应使用Collections.synchronizedMap方法“包装”映射。最好在创建时执行此操作,以防止意外不同步地访问映射
如果jdk1.6只有两种类型的有序映射EnumMap和LinkedHashMap。它们都不同步。如果您只需要记住顺序,请使用
Map m = Collections.synchronizedMap(new LinkedHashMap(...));
如果要排序,请使用ConcurrentSkipListMap您使用的是哪种语言?LinkedHashMap是Java的一部分。性能开销是可以忽略的(毫不夸张地说是纳秒)。澄清一下:如果我不希望一次访问此
LinkedHashMap
,是否仍建议同步它?或者单独使用LinkedHashMap
就足够了?@blo0p3r单独使用LinedHashMap
就足够了。
Map m = Collections.synchronizedMap(new LinkedHashMap(...));