何时通过LinkedList或ArrayList使用HashMap,反之亦然

什么是我们不能总是使用HashMap的原因,尽pipe它比ArrayList或LinkedList在添加,删除操作方面效率更高,而且不pipe元素的数量如何。

我google了一下,发现了一些原因,但总是有一个使用HashMap的解决方法,其优点仍然存在。

列表表示元素的顺序排列。 地图用于表示键/值对的集合。

虽然你可以使用地图作为列表,但这样做有一些明显的缺点。

维护顺序: – 按照定义列出命令。 您可以添加项目,然后按照插入项目的顺序遍历列表。 将项目添加到HashMap中时,不能保证以与放置顺序相同的顺序检索项目.HashMap的子类像LinkedHashMap,它将维护顺序,但一般顺序不能保证使用Map。

键/值语义: – 映射的目的是基于可用于稍后检索项目的键来存储项目。 类似的function只能在有限的情况下使用列表来实现,其中键恰好是列表中的位置。

代码可读性考虑下面的例子。

  // 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 

集合function通过集合类可以使用一些很棒的实用function。 例如 …

  // 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提供随机访问,并且在访问元素时效率更高,但插入和删除元素的速度通常较慢。