Map的排序

  今天工作中需要用到一个保持插入顺序的键值对的数据结构。遂想到了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

 

你可能感兴趣的:(map)