在链接的hashmap和hashmap中进行选择的实际场景是什么?我已经完成了每项工作,并得出结论,即链接映射保持插入的顺序,即元素将以与插入顺序相同的顺序检索,而散列映射不会维护顺序。 那么有人可以告诉在实际场景中选择其中一个集合框架,为什么?什么时候在java中通过hashmap使用linkedhashmap?
回答
LinkedHashMap
维护密钥的插入顺序,即密钥被插入LinkedHashMap
的顺序。另一方面,HashMap
不保留任何顺序或键或值。在性能方面,HashMap
和LinkedHashMap
之间没有太大的区别,但是LinkedHashMap有更多的内存足迹比HashMap
保持双向链接列表,它用来跟踪键的插入顺序。
A HashMap
比LinkedHashMap
具有更好的性能,因为LinkedHashMap
需要花费维护链接列表。 LinkedHashMap实现了一个正常的哈希表,但是哈希表的键的好处是作为一个双向链表来存储。 他们的两种方法都不同步。 让我们来看看他们的API文档:
HashMap
是一个哈希表,每个哈希槽中都有一个存储桶。
API文档:
此实现提供稳定的性能为基本 操作(get和put),假定哈希函数将分散的桶中正确的 元素。对集合视图 的迭代需要的时间与HashMap实例 (桶的数量)加上其大小(键值 映射的数量)的“容量”成正比。因此,重要的是,如果迭代性能为 ,则不要将初始容量设置得太高(或者负载因子太低)。
LinkedHashMap
是一个实现地图接口的链表。
哈希表和
Map
接口的链接列表实现,具有 预知的迭代顺序:作为 API文档中说。该实施方式与HashMap 的不同之处在于其保持通过其所有 条目运行的双向链表。此链接列表定义了迭代排序,通常是键被插入到地图 (插入顺序)中的顺序。
什么可能是每个的实际情况?为什么我们会选择它? – nikhil 2014-10-29 05:13:12
请通过突出显示的部分。我希望你能得到答案 – 2014-10-29 05:16:29
- 的HashMap使有关迭代顺序绝对没有保证。它可以(并且将)甚至在添加新元素时完全改变。
- 的LinkedHashMap将迭代在沃德中的R其中的条目被放进地图
- LinkedHashMap中也需要比HashMap的,因为这种排序功能的更多的内存。正如我之前所说LinkedHashMap使用双重LinkedList来保持元素的顺序。
在大多数情况下,当使用Map时,您并不在乎是否保留插入顺序。如果您不在意,请使用HashMap,并且您关心LinkedHashMap。但是,如果您查看使用地图的时间和地点,在很多情况下,它只包含少量条目,不足以满足不同实现的差异。
购物车是一个现实生活中的例子,我们看到购物车号码与我们选择的物品相对应,以便我们选择该物品。因此,地图可能是LinkedHashMap<Cart Number Vs Item Chosen>
的LinkedHashMap将在该项目中投入了地图的顺序进行迭代。
在LinkedHashMap中允许空值。
该实现不同步并使用双链接桶。
LinkedHashMap与HashMap非常相似,但增加了对项目添加或访问项目的顺序的了解,因此迭代顺序与插入顺序相同,具体取决于构造参数。
LinkedHashMap通过重写removeEldestEntry()方法为创建Cache对象提供了一个很好的起点。这使您可以使用您定义的某些条件创建可使数据过期的Cache对象。
基于带链接列表的链接列表和哈希数据结构(思考索引SkipList)以数据插入树中的方式存储数据。最适合实施LRU(最近最少使用)。 LinkedHashMap扩展了HashMap。
它按照插入顺序维护地图中条目的链接列表。这允许在地图上进行插入顺序迭代。也就是说,当迭代LinkedHashMap的collection-view时,元素将按照它们插入的顺序返回。此外,如果再次将密钥插入到LinkedHashMap中,原始订单将被保留。这允许在地图上进行插入顺序迭代。也就是说,迭代LinkedHashMap时,元素将按照插入的顺序返回。你也可以创建一个LinkedHashMap,它按照上次访问的顺序返回它的元素。 - 下面是它的构造:
LinkedHashMap()
此构造具有默认初始容量(16)和负载因子(0.75)的空插入顺序LinkedHashMap实例。
LinkedHashMap(int capacity)
此构造函数构造一个具有指定初始容量的空LinkedHashMap。
LinkedHashMap(int capacity, float fillRatio)
该构造函数用指定的初始容量和加载因子构造一个空的LinkedHashMap。
LinkedHashMap(Map m)
此构造函数使用与指定的Map相同的映射构造插入顺序Linked HashMap。
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);
- 1. 为什么在LinkedHashMap中迭代通过桶比HashMap快?
- 2. 在Java中,我什么时候可以通过sparseArray使用ArrayList?
- 3. 什么时候使用Server.Transfer通过PostBackURL?
- 4. 什么时候通过NSURLConnection使用Restkit?
- 5. 什么时候在Java中使用“this”
- 6. 同时扩展HashMap和LinkedHashMap?
- 7. 什么时候应该通过Autohotkey中的SentInput使用`Sent`?
- 8. 在TypeScript中,什么时候使用“let”,什么时候使用“const”?
- 9. 什么时候使用for-each和什么时候在xslt中使用apply-templates?
- 10. 什么时候使用__proto__和什么时候使用原型
- 11. 什么时候应该使用AWS,什么时候不使用
- 12. intn_t什么时候使用它,什么时候不使用
- 13. 什么时候使用Ruby和什么时候使用PHP
- 14. 什么时候使用ByteString,什么时候不使用?
- 15. 什么时候通过ref关键字
- 16. 什么时候在PHP中通过引用
- 17. 什么时候在Java中设置mutate?
- 18. 什么时候在Django中使用“AbstractBaseUser”?
- 19. 什么时候在javascript中使用'return'
- 20. 什么时候在swift中使用respondsToSelector?
- 21. 什么时候在C#中使用类?
- 22. 什么时候在gridview中使用dynamicfield?
- 23. 什么时候在mysql中使用OPTIMIZE
- 24. 什么时候在.NET中使用GC.Collect()?
- 25. 什么时候在Android中使用LayoutInflater
- 26. 什么时候在C++中使用“declare”?
- 27. 什么时候在mongodb中使用BSON?
- 28. 什么时候在hibernate中使用Criteria.ALIAS_TO_ENTITY_MAP?
- 29. 什么时候应该使用async/await,什么时候不用?
- 30. 什么时候可以通过webclient或httpwebrequest使用WCF?
的([HashMap的,LinkedHashMap的和TreeMap之间的不同]可能的复制http://stackoverflow.com/questions/2889777/difference -Hashmap-linkedhashmap-and-treemap) – Jimmar 2016-10-26 01:14:41
LinkedHashMap的常见用法是LRUCache:http://stackoverflow.com/questions/23772102/lru-cache-in-java-with-generics-and-o1-operations – 2017-02-28 21:03:27