java - 什么时候在 java 中使用 linkedhashmap 而不是 hashmap?

标签 java data-structures types hashmap linkedhashmap

在linkedhashmap和hashmap中选择的实际场景是什么?我已经完成了每个工作并得出结论 linkedhashmap 维护插入顺序,即元素将按照与插入顺序相同的顺序检索,而 hashmap 不会维护顺序。 那么谁能说说在哪些实际场景中选择其中一种收集框架以及为什么?

最佳答案

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

  2. null LinkedHashMap 中允许值。

  3. 实现不同步,使用双链桶。

  4. LinkedHashMapHashMap 非常相似,但它增加了对添加或访问项目的顺序的认识,因此迭代顺序与插入顺序取决于构造参数。

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

  6. 基于链表和具有链表(想想索引-SkipList)功能的散列数据结构,以将数据插入树中的方式存储数据。最适合实现 LRU(最近最少使用)。 LinkedHashMap 扩展 HashMap

它按照条目插入的顺序维护映射中条目的链接列表。这允许在 map 上进行插入顺序迭代。也就是说,当遍历 LinkedHashMap 的 Collection View 时,元素将按照插入的顺序返回。此外,如果将 key 再次插入到 LinkedHashMap 中,原始顺序将保留。这允许在 map 上进行插入顺序迭代。也就是说,当迭代 LinkedHashMap 时,元素将按照插入的顺序返回。您还可以创建一个 LinkedHashMap,它按照上次访问的顺序返回其元素。

LinkedHashMap 构造函数

LinkedHashMap( )

此构造函数使用默认初始容量 (16) 和加载因子 (0.75) 构造一个空的插入顺序 LinkedHashMap 实例。

LinkedHashMap(int capacity)

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

 LinkedHashMap(int capacity, float fillRatio)

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

LinkedHashMap(Map m)

此构造函数构造一个插入顺序的 Linked HashMap,其映射与指定的 Map 相同。

LinkedHashMap(int capacity, float fillRatio, boolean Order)

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

LinkedHashMap支持的重要方法

 Class clear( )

从 map 中删除所有映射。

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);  

关于java - 什么时候在 java 中使用 linkedhashmap 而不是 hashmap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26623129/

相关文章:

java - Python 通过异步递增变量运行 Java 命令行参数。

java - 仅选择 JTree 中的叶子节点

c++ - C++数据结构队列:使用for循环查找队列中最大的元素

scala - 使用扩展类中的路径相关类型时出错

java - 使用 Swing 在 Pane 中选择文件

java - 创建类型 X 的通用字段并通过反射将其值设置为(不相关的)类型 Y 不会导致 IllegalArgumentException

java - 将相似的项目合并到列表中

c++ - 链表 - 移动到下一个节点

javascript - `unknown` 用法上的 TypeScript 3.0 错误

python - 为什么Python允许str与int相乘?