java如何对map进行排序详解(map集合的使用)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

java如何对map进⾏排序详解(map集合的使⽤)
⼀、⽐较器Comparator,实现compare⽅法
⼆、Collections的sort⽅法
TreeMap
TreeMap默认是升序的,如果我们需要改变排序⽅式,则需要使⽤⽐较器:Comparator。

Comparator可以对集合对象或者数组进⾏排序的⽐较器接⼝,实现该接⼝的public compare(T o1,To2)⽅法即可实现排序,该⽅法主要是根据第⼀个参数o1,⼩于、等于或者⼤于o2分别返回负整数、0或者正整数。

如下:
复制代码代码如下:
public class TreeMapTest {
public static void main(String[] args) {
Map<String, String> map = new TreeMap<String, String>(
new Comparator<String>() {
public int compare(String obj1, String obj2) {
// 降序排序
return pareTo(obj1);
}
});
map.put("c", "ccccc");
map.put("a", "aaaaa");
map.put("b", "bbbbb");
map.put("d", "ddddd");
Set<String> keySet = map.keySet();
Iterator<String> iter = keySet.iterator();
while (iter.hasNext()) {
String key = iter.next();
System.out.println(key + ":" + map.get(key));
}
}
}
运⾏结果如下:
d:ddddd
c:ccccc
b:bbbbb
a:aaaaa
上⾯例⼦是对根据TreeMap的key值来进⾏排序的,但是有时我们需要根据TreeMap的value来进⾏排序。

对value排序我们就需要借助于Collections的sort(List<T> list, Comparator<? super T> c)⽅法,该⽅法根据指定⽐较器产⽣的顺序对指定列表进⾏排序。

但是有⼀个前提条件,那就是所有的元素都必须能够根据所提供的⽐较器来进⾏⽐较。

如下:
复制代码代码如下:
public class TreeMapTest {
public static void main(String[] args) {
Map<String, String> map = new TreeMap<String, String>();
map.put("d", "ddddd");
map.put("b", "bbbbb");
map.put("a", "aaaaa");
map.put("c", "ccccc");
//这⾥将map.entrySet()转换成list
List<Map.Entry<String,String>> list = new ArrayList<Map.Entry<String,String>>(map.entrySet());
//然后通过⽐较器来实现排序
Collections.sort(list,new Comparator<Map.Entry<String,String>>() {
//升序排序
public int compare(Entry<String, String> o1,
Entry<String, String> o2) {
return o1.getValue().compareTo(o2.getValue());
}
});
for(Map.Entry<String,String> mapping:list){
System.out.println(mapping.getKey()+":"+mapping.getValue());
}
}
}
运⾏结果
a:aaaaa
b:bbbbb
c:ccccc
d:ddddd
HashMap
我们都是HashMap的值是没有顺序的,他是按照key的HashCode来实现的。

对于这个⽆序的HashMap我们要怎么来实现排序呢?参照TreeMap的value排序,我们⼀样的也可以实现HashMap的排序。

复制代码代码如下:
public class HashMapTest {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("c", "ccccc");
map.put("a", "aaaaa");
map.put("b", "bbbbb");
map.put("d", "ddddd");
List<Map.Entry<String,String>> list = new ArrayList<Map.Entry<String,String>>(map.entrySet());
Collections.sort(list,new Comparator<Map.Entry<String,String>>() {
//升序排序
public int compare(Entry<String, String> o1,
Entry<String, String> o2) {
return o1.getValue().compareTo(o2.getValue());
}
});
for(Map.Entry<String,String> mapping:list){
System.out.println(mapping.getKey()+":"+mapping.getValue());
}
}
}
运⾏结果
a:aaaaa
b:bbbbb
c:ccccc
d:ddddd。

相关文档
最新文档