在无聊的一天中,有一个以前的同学面试,回来后问我如何讲bac放进一个map集合key中,取出来是abc
当时在中午饭,后来回公司就网上查了一下,一般会使用Treemap进行存储,因为Treemap会自动对key值进行排序,如:
Map<String,String> map = new TreeMap<String,String>();
map.put("b","b");
map.put("a","a");
map.put("c","c");
for(Map.Entry<String,String> item : map.entrySet()){
System.out.println(item.getKey()+"\t"+item.getValue());
}
结果:
a a
b b
c c
但是要对Value进行排序的话,就要接口Comparator接口实现其方法,代码如下:
package com.example;
/*
.......................阿弥陀佛......................
. _oo0oo_ .
. o8888888o .
. 88" . "88 .
. (| -_- |) .
. 0\ = /0 .
. ___/‘---’\___ .
. .' \| |/ '. .
. / \\||| : |||// \ .
. / _||||| -卍-|||||_ \ .
. | | \\\ - /// | | .
. | \_| ''\---/'' |_/ | .
. \ .-\__ '-' ___/-. / .
. ___'. .' /--.--\ '. .'___ .
. ."" ‘< ‘.___\_<|>_/___.’>’ "". .
. | | : ‘- \‘.;‘\ _ /’;.’/ - ’ : | | .
. \ \ ‘_. \_ __\ /__ _/ .-’ / / .
. =====‘-.____‘.___ \_____/___.-’___.-’===== .
. ‘=---=’ .
. .
.....................佛祖保佑 ,永无BUG..................
*/
import java.util.*;
/**
* @author 陈毅程 at 2019/5/27 14:52
* contact by QQ:2446762079
* contact by 微信:cyc2446762079
*/
public class test5 {
public static void main(String[] args) {
Map map1 = new TreeMap(); //定义Map集合对象
map1.put("apple", "新鲜的苹果"); //向集合中添加对象
map1.put("compr", "配置优良的计算机");
map1.put("book", "堆积成山的图书");
map1.put("hook", "堆积成山的图书");
map1.put("dook", "堆积成山的图书");
Map<String,String> map = Compar(map1);
for(Map.Entry<String,String> item : map.entrySet()){
System.out.println(item.getKey()+"\t"+item.getValue());
}
}
public static Map<String,String> Compar(Map<String,String> map){
if (map.isEmpty() || map == null)
return null;
Map<String,String> LinketHashMap = new LinkedHashMap<>();
List<Map.Entry<String,String>> listMap = new ArrayList<>( map.entrySet());
Collections.sort(listMap,new MapKeyComparator());
Iterator<Map.Entry<String,String>> iterator = listMap.iterator();
Map.Entry<String,String> map1 = null;
while (iterator.hasNext()){
map1 = iterator.next();
LinketHashMap.put(map1.getKey(),map1.getValue());
}
return LinketHashMap;
}
}
class MapKeyComparator implements Comparator<Map.Entry<String,String>>{
@Override
public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) {
// 排序的方法,倒序Key值排序
// 如果想进行正序,o1.getKey().compareTo(o2.getKey());
return o2.getKey().compareTo(o1.getKey());
}
}
结果:
hook 堆积成山的图书
dook 堆积成山的图书
compr 配置优良的计算机
book 堆积成山的图书
apple 新鲜的苹果
在查看网上说法的时候有一篇文章说到一个小问题,就是当key为String类型的int的时候,排序会出现如下:
put(“1”,“1”)
put(“2”,“2”)
put(“10”,“10”)
结果为:
1 1
10 10
2 2
这个时候把int更换为long类型就可以了
Map<Integer, String> map = new TreeMap<Integer, String>();
map.put(4, "ddddd");
map.put(7, "bbbbb");
map.put(10, "aaaaa");
map.put(1, "ccccc");
List<Map.Entry<Integer,String>> list = new ArrayList<Map.Entry<Integer,String>>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<Integer, String>>() {
@Override
public int compare(Map.Entry<Integer, String> o1, Map.Entry<Integer, String> o2) {
return o2.getKey().compareTo(o1.getKey());
}
});
for (Map.Entry<Integer,String> item : list){
System.out.println(item.getKey()+"\t"+item.getValue());
}