在linkedhashmap和hashmap中选择的实际场景是什么?我已经完成了每个工作并得出结论 linkedhashmap 维护插入顺序,即元素将按照与插入顺序相同的顺序检索,而 hashmap 不会维护顺序。 那么谁能说说在哪些实际场景中选择其中一种收集框架以及为什么?
最佳答案
LinkedHashMap
将按照条目放入映射的顺序进行迭代。null
LinkedHashMap
中允许值。实现不同步,使用双链桶。
LinkedHashMap
与HashMap
非常相似,但它增加了对添加或访问项目的顺序的认识,因此迭代顺序与插入顺序取决于构造参数。LinkedHashMap
还为通过覆盖removeEldestEntry()
方法创建缓存对象提供了一个很好的起点。这使您可以创建一个缓存对象,该对象可以使用您定义的某些条件使数据过期。基于链表和具有链表(想想索引-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/