在linkedhashmap和hashmap中选择的实际场景是什么?我已经完成了每个工作并得出结论,linkhashmap维护插入的顺序,即元素将以与插入顺序相同的顺序检索,而hashmap将不维护顺序。那么有人可以告诉在什么实际场景中选择其中一个集合框架以及为什么?
它按照插入顺序维护地图中条目的链接列表。这允许在地图上进行插入顺序迭代。也就是说,当迭代LinkedHashMap的集合视图时,元素将按插入顺序返回。此外,如果再次将密钥插入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( )
从地图中删除所有映射。
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);
购物车是一个真实的例子,我们看到购物车号码与我们选择的物品相对应。所以地图可能是LinkedHashMap<Cart Number Vs Item Chosen>
LinkedHashMap
维护密钥的插入顺序,即密钥插入LinkedHashMap
的顺序。另一方面,HashMap
不保留任何订单或键或值。在性能方面,HashMap
和LinkedHashMap
之间没有太大区别,但是LinkedHashMap比HashMap
有更多的内存占用,以维护用于跟踪键的插入顺序的双向链表。
HashMap
比LinkedHashMap
具有更好的性能,因为LinkedHashMap
需要维护链表的费用。 LinkedHashMap实现了一个普通的哈希表,但是哈希表的键的附加好处是存储为双向链表。他们的两种方法都不同步。我们来看看他们的API文档:
HashMap
是一个哈希表,每个哈希槽都有桶。
API文档:
假设散列函数在桶之间正确地分散元素,该实现为基本操作(get和put)提供了恒定时间性能。对集合视图的迭代需要与HashMap实例的“容量”(桶的数量)加上其大小(键 - 值映射的数量)成比例的时间。因此,如果迭代性能很重要,则不要将初始容量设置得太高(或负载因子太低)非常重要。
LinkedHashMap
是一个实现地图界面的链表。如API文档中所述:
Map
接口的哈希表和链表实现,具有可预测的迭代顺序。此实现与HashMap的不同之处在于它维护了一个贯穿其所有条目的双向链表。此链接列表定义迭代排序,通常是键插入映射的顺序(插入顺序)。
在大多数情况下,使用Map时,您不关心是否保持插入顺序。如果你不在乎,请使用HashMap,并且你关心的是LinkedHashMap。
但是,如果您查看使用映射的时间和位置,在许多情况下它只包含少量条目,不足以使不同实现的性能差异产生差异。