今天工作中需要用到一个保持插入顺序的键值对的数据结构。遂想到了Map中的 JDK中map的LinkedHashMap 能满足需要。顺便做了下面的整理。
排序都是依据key来排序的。如果要依据Value来排序,需要自己来实现相关的Map类,有兴趣的可以试试看。
LinkedHashMap 会保持插入时候的顺序,但是相同的key插入多次,默认以第一次插入的顺序为准,除非将accessOrder设置为true,则以最后一次插入的顺序为准
LinkedHashMap<String,String> map=new LinkedHashMap<String,String>();
map.put("abc", "11");
map.put("bbc", "11");
map.put("cac", "11");
map.put("dbc", "11");
map.put("aba", "11");
for(Map.Entry<String, String> entry:map.entrySet()){
System.out.println(entry.getKey() +" : "+entry.getValue());
}
结果:
abc : 11
bbc : 11
cac : 11
dbc : 11
aba : 11
HashMap不保证映射的顺序,特别是它不保证该顺序恒久不变
HashMap<String,String> map=new HashMap<String,String>();
map.put("abc", "11");
map.put("bbc", "11");
map.put("cac", "11");
map.put("dbc", "11");
map.put("aba", "11");
for(Map.Entry<String, String> entry:map.entrySet()){
System.out.println(entry.getKey() +" : "+entry.getValue());
}
结果:
aba : 11
cac : 11
dbc : 11
abc : 11
bbc : 11
TreeMap如果不实现自定义的Comparator接口,则按照自然顺序进行排序。内部基于红黑树的数据结构实现。
TreeMap<String,String> map=new TreeMap<String,String>();
map.put("abc", "11");
map.put("bbc", "11");
map.put("cac", "11");
map.put("dbc", "11");
map.put("aba", "11");
for(Map.Entry<String, String> entry:map.entrySet()){
System.out.println(entry.getKey() +" : "+entry.getValue());
}
结果:
aba : 11
abc : 11
bbc : 11
cac : 11
dbc : 11
TreeMap<String,String> map=new TreeMap<String,String>(new Comparator<String>(){
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}
});
map.put("abc", "11");
map.put("bbc", "11");
map.put("cac", "11");
map.put("dbc", "11");
map.put("aba", "11");
for(Map.Entry<String, String> entry:map.entrySet()){
System.out.println(entry.getKey() +" : "+entry.getValue());
}
结果:
dbc : 11
cac : 11
bbc : 11
abc : 11
aba : 11