如何对hashmap进行排序

时间:2014-08-22 14:51:18

标签: java hashmap

我有这个hashmap:

       HashMap<String, ArrayList<String>> allhotels = new HashMap<>();

我想按字母顺序对每个Arraylist中的所有值进行排序。这是我目前的方法:

public void sortHotels() {

    for(int i = 0; i < allhotels.size(); i++) {

        Collections.sort(allhotels.values().toArray(), String.CASE_INSENSITIVE_ORDER);
    }

}

我想在ArrayList中为hashmap中的每个条目排序字符串。

5 个答案:

答案 0 :(得分:6)

您没有对地图中包含的列表进行排序。您将地图中的所有列表作为包含列表的数组获取,并尝试使用比较器对列表数组进行排序。

您想要的是对地图的每个值进行排序。因此,迭代值,并对它们进行排序:

for (List<String> list : allhotels.values()) {
    Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
}

答案 1 :(得分:2)

这应该这样做:

for (List<String> value : allhotels.values())
{
    Collections.sort(value, String.CASE_INSENSITIVE_ORDER);
}

迭代所有值(每个值都是列表),并对列表进行排序。列表就地排序,因此排序将直接应用于地图的值。

答案 2 :(得分:0)

根据您对我的评论的回答,您需要单独对每个列表进行排序:

for(ArrayList<String> list : allhotels.values()) {

    Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
}

答案 3 :(得分:0)

  

toArray()返回包含所有元素的数组   这个系列。如果这个集合对什么做出任何保证   命令其元素由其迭代器返回,此方法必须   以相同的顺序返回元素。 返回的数组将是   &#34;安全&#34;因为此系列不会保留对它的引用。

因此allhotels.values()。toArray()的任何更改都不会反映到allhotels地图上。 HashMap的预期用途不是排序,但你仍然可以从这个主题中查看一些可能性和想法 - 可能还有答案 - here

答案 4 :(得分:0)

如果您需要在迭代过程中获取密钥,如JB Nizet的答案评论所述,您可以按如下方式编写代码:

Iterator itr = allhotels.entrySet().iterator();
while(itr.hasNext()){
    Entry<String, ArrayList<String>> hotelEntry = (Entry<String, ArrayList<String>>)itr.next();
    String currentKey = hotelEntry.getKey();
    Collections.sort(hotelEntry.getValue(), String.CASE_INSENSITIVE_ORDER);
}