为什么我们不能总是使用 HashMap,即使它在添加、删除操作中比 ArrayList 或 LinkedList 更高效,而且不管元素数量如何。
我查了一下谷歌,找到了一些原因,但总是有解决方案可以使用 HashMap,而且仍然具有优势。
为什么我们不能总是使用 HashMap,即使它在添加、删除操作中比 ArrayList 或 LinkedList 更高效,而且不管元素数量如何。
我查了一下谷歌,找到了一些原因,但总是有解决方案可以使用 HashMap,而且仍然具有优势。
列表表示元素的顺序排列。 地图用于表示键/值对的集合。
虽然您可以将地图用作列表,但这样做确实存在一些明显的缺点。
维护顺序:
键/值语义:
代码可读性: 请考虑以下示例。
// Adding to a List
list.add(myObject); // adds to the end of the list
map.put(myKey, myObject); // sure, you can do this, but what is myKey?
map.put("1", myObject); // you could use the position as a key but why?
// Iterating through the items
for (Object o : myList) // nice and easy
for (Object o : myMap.values()) // more code and the order is not guaranteed
集合功能 通过Collections类,可以为列表提供许多实用的工具函数。例如...
// Randomize the list
Collections.shuffle(myList);
// Sort the list
Collections.sort(myList, myComparator);
列表和映射是不同的数据结构。映射用于将键与值关联起来,而列表则是有序的集合。
Map是Java Collection Framework中的接口,而HashMap是Map接口的一种实现。HashMap在基于键查找值以及基于键插入和删除值方面非常高效。HashMap的条目不是有序的。
ArrayList和LinkedList都是List接口的实现。LinkedList提供了顺序访问,并且通常更有效地在列表中插入和删除元素,但是对于访问列表中的元素则较为低效。ArrayList提供随机访问,并且在访问元素时更加高效,但通常在插入和删除元素方面则较慢。
我将在这里列举一些实际案例和场景,告诉你何时使用其中之一,这可能对其他人有所帮助:
HashMap
当您的应用程序需要使用缓存时。Redis和membase是某种扩展的HashMap。(不管元素的顺序如何,您需要快速(O(1))读取访问(值),使用键)。
LinkedList
当顺序很重要(它们按添加到LinkedList中的顺序排序),元素数量未知(不浪费内存分配)并且需要快速插入时间(O(1))时使用。待办事项列表可以按顺序列出,因为它们被添加到其中。