HashMap的储存是没有顺序的,而是按照key的HashCode实现.
// key=商品名称,value=价格,这里以这个例子实现按名称排序和按价格排序.
Map store = new HashMap();
store.put("iphone12", 6799);
store.put("iphone12pro", 8499);
store.put("macbookPro", 19499);
store.put("ipadAir", 6999);
store.put("watch6", 3199);
// 直接输出HashMap得到的是一个无序Map(不是Arraylist那种顺序型储存)
System.out.println(store);
{ipadAir=6999, iphone12pro=8499, macbookPro=19499, watch6=3199, iphone12=6799}
将entrySet转换为List,然后重写比较器比较即可.这里可以使用List.sort(comparator),也可以使用Collections.sort(list,comparator)
// 转换为list
List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(store.entrySet());
// 使用list.sort()排序,按key排序
list.sort(new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o1.getKey().compareTo(o2.getKey());
}
});
// for循环
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).getKey() + ":" + list.get(i).getValue());
}
System.out.println("=================================");
// 使用Collections.sort()排序,按value排序
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o1.getValue().compareTo(o2.getValue());
}
});
// for-each循环
for (Map.Entry<String, Integer> mapping : list){
System.out.println(mapping.getKey() + ":" + mapping.getValue());
}
{ipadAir=6999, iphone12pro=8499, macbookPro=19499, watch6=3199, iphone12=6799}
ipadAir:6999
iphone12:6799
iphone12pro:8499
macbookPro:19499
watch6:3199
=================================
watch6:3199
iphone12:6799
ipadAir:6999
iphone12pro:8499
macbookPro:19499