在無聊的一天中,有一個以前的同學面試,回來後問我如何講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());
}