何时在LinkedList或ArrayList上使用HashMap,反之亦然

73 java arrays linked-list arraylist hashmap

我们不能总是使用HashMap的原因是什么,即使它在添加,删除操作方面比ArrayList或LinkedList更有效,也与元素的数量无关.

我用Google搜索并发现了一些原因,但总是有一个使用HashMap的解决方法,优势仍然存在.

pol*_*ter 92

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

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

维护订单: - 按订单定义列表.您添加项目,然后您可以按插入项目的顺序遍历列表.当您向HashMap添加项目时,不能保证按照您放入它们的顺序检索项目.HotMap的子类如LinkedHashMap将维护顺序,但一般顺序不能保证使用Map.

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

代码可读性 请考虑以下示例.

    // 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
Run Code Online (Sandbox Code Playgroud)

集合功能 通过Collections类可以为列表提供一些很棒的实用程序功能.例如 ...

    // Randomize the list
    Collections.shuffle(myList);

    // Sort the list
    Collections.sort(myList, myComparator);  
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助,


jaz*_*awg 33

列表和地图是不同的数据结构.当您想要将键与值相关联时,映射用于列表,而列表是有序集合.

Map是Java Collection Framework中的一个接口,HashMap是Map接口的一个实现.HashMap可以有效地根据键定位值,并根据键插入和删除值.HashMap的条目不是有序的.

ArrayList和LinkedList是List接口的实现.LinkedList提供顺序访问,并且通常在列表中插入和删除元素时更有效,但是,访问列表中的元素效率较低.ArrayList提供随机访问,在访问元素方面效率更高,但插入和删除元素的速度通常较慢.