何时在java中使用linkedhashmap而不是hashmap?

在链接哈希映射和哈希映射之间进行选择的实际方案是什么?我已经完成了每个工作,并得出结论,linkedhashmap保持插入顺序,即元素将以与插入顺序相同的顺序检索,而哈希映射不会保持顺序。那么,有人能说出在哪些实际场景中选择其中一个集合框架,为什么呢?


答案 1
  1. LinkedHashMap将按照条目放入映射的顺序进行迭代。

  2. null中允许使用的值。LinkedHashMap

  3. 实现不同步,并使用双链接存储桶。

  4. LinkedHashMap与 非常相似,但它增加了对添加或访问项目的顺序的感知,因此迭代顺序与插入顺序相同,具体取决于构造参数。HashMap

  5. LinkedHashMap还为通过重写方法创建 Cache 对象提供了一个很好的起点。这允许您创建一个 Cache 对象,该对象可以使用您定义的某些条件使数据过期。removeEldestEntry()

  6. 基于链接列表和哈希数据结构,具有链接列表(想想索引的SkipList)功能,以数据插入树的方式存储数据。最适合实现 LRU(最近最少使用)。 延伸。LinkedHashMapHashMap

它按条目的插入顺序维护地图中条目的链接列表。这允许在地图上进行插入顺序迭代。也就是说,当循环访问 的集合视图时,元素将按照插入的顺序返回。此外,如果再次将密钥插入 到 中,则保留原始顺序。这允许在地图上进行插入顺序迭代。也就是说,在迭代 a 时,元素将按照插入的顺序返回。您还可以创建 一个,该函数按上次访问的顺序返回其元素。LinkedHashMapLinkedHashMapLinkedHashMapLinkedHashMap

LinkedHashMap 构造函数

LinkedHashMap( )

此构造函数构造一个空的插入顺序 LinkedHashMap 实例,该实例具有默认的初始容量 (16) 和负载因子 (0.75)。

LinkedHashMap(int capacity)

此构造函数构造一个具有指定初始容量的空 LinkedHashMap。

 LinkedHashMap(int capacity, float fillRatio)

此构造函数构造一个具有指定初始容量和负载因子的空 LinkedHashMap。

LinkedHashMap(Map m)

此构造函数构造一个插入顺序的链接哈希映射,其映射与指定的映射相同。

LinkedHashMap(int capacity, float fillRatio, boolean Order)

此构造函数构造一个具有指定初始容量、负载因子和排序模式的空 LinkedHashMap 实例。

LinkedHashMap支持的重要方法

 Class clear( )

从映射中删除所有映射。

containsValue(object value )>

如果此映射将一个或多个键映射到指定的值,则返回 true。

 get(Object key)

返回指定键映射到的值,如果此映射不包含该键的映射,则返回 null。

removeEldestEntry(Map.Entry eldest)

以下是如何使用LinkedHashMap的示例:

Map<Integer, String> myLinkedHashMapObject = new LinkedHashMap<Integer, String>();  
myLinkedHashMapObject.put(3, "car");  
myLinkedHashMapObject.put(5, "bus");  
myLinkedHashMapObject.put(7, "nano");  
myLinkedHashMapObject.put(9, "innova");  
System.out.println("Modification Before" + myLinkedHashMapObject);  
System.out.println("Vehicle exists: " +myLinkedHashMapObject.containsKey(3));  
System.out.println("vehicle innova Exists: "+myLinkedHashMapObject.containsValue("innova"));  
System.out.println("Total number of vehicles: "+ myLinkedHashMapObject.size());  
System.out.println("Removing vehicle 9: " + myLinkedHashMapObject.remove(9));  
System.out.println("Removing vehicle 25 (does not exist): " + myLinkedHashMapObject.remove(25));  
System.out.println("LinkedHashMap After modification" + myLinkedHashMapObject);  

答案 2

购物车是一个现实生活中的例子,我们看到购物车号码与我们选择的项目相比,我们选择了项目的顺序。所以地图可能是LinkedHashMap<Cart Number Vs Item Chosen>