Map的排序

本文对比了Java中HashMap、LinkedHashMap与TreeMap三种Map集合的特点与应用场景。重点介绍了它们如何保持插入顺序、自然排序及自定义排序,并通过实例演示了不同Map类型的输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值