集合框架之Map

1.Map集合的特点

1.1无序

运行的数据和输出的数据是不一致的

Map<String,String> map=new HashMap<>();
map.put("zh","123");
map.put("ss","345");
map.put("hw","456");
System.out.println(map);

                               

1.2以键值对的方式

值唯一,键不唯一(允许添加)

相反键相同,值不同的情况,值就会被后面的覆盖掉

Map<String,String> map=new HashMap<String,String>();
map.put("zh","123");
map.put("ss","345");
map.put("hw","456");
map.put("zs","123");
System.out.println(map);

                                

2.遍历方式 

2.1获取所有的Key

Map<String,String> map=new HashMap<String,String>();
        map.put("zh","123");
        map.put("ss","345");
        map.put("hw","456");
        Set<String> keys = map.keySet();
        for (String key:keys){
            System.out.println(key);
        }

2.2获取所有的Value

//2获取所有的Value
        Map<String,String> map=new HashMap<String,String>();
        map.put("zh","123");
        map.put("ss","345");
        map.put("hw","456");
        Collection<String> values = map.values();
        for (String v:values){
            System.out.println(v);
        }

2.3获取所有的键值对entrySet

2.3.1HashMap可以传null值
 //HashMap可以传null值,
        Map<String,String> map=new HashMap<String,String>();
        map.put("zh","123");
        map.put("ss","345");
        map.put("hw","456");
        map.put(null,null);//会被覆盖
        map.put(null,null);
        //通过entrvSet获取Map集合的键值对
        Set<Map.Entry<String, String>> entries = map.entrySet();
        for (Map.Entry<String, String> entry : entries) {
            System.out.println(entry.getKey()+"="+entry.getValue());
        }
2.3.2Hashtable不可以传null值
//Hashtable不可以传null值
        Map<String,String> map=new Hashtable<>();
        map.put("zh","123");
        map.put("ss","345");
        map.put("hw","456");
//        通过entrvSet获取Map集合的键值对
        Set<Map.Entry<String, String>> entries = map.entrySet();
        for (Map.Entry<String, String> entry : entries) {
            System.out.println(entry.getKey()+"="+entry.getValue());
        }

3.TreeMap

3.1根据key值进行升序和降序

默认是由Map集合中的key来进行升序排序的

  //默认是由Map集合中的key来进行升序排序的
        Map<String,String> map=new TreeMap<>();
        map.put("b","100");
        map.put("a","80");
        map.put("c","90");
//        System.out.println(map);
        map.forEach((k,v)->{
            System.out.println(k+"="+v);
        });

所以会根据key值a,b,c这样排序

降序:如何实现map集合的key来进行降序的

 //如何实现map集合的key来进行降序的
        Map<String,String> map=new TreeMap<>(Comparator.reverseOrder());
        map.put("b","100");
        map.put("a","80");
        map.put("c","90");
//        System.out.println(map);
        map.forEach((k,v)->{
            System.out.println(k+"="+v);
        });

Comparator.reverseOrder():是倒序的意思

Comparator.comparing(类::属性一).reversed();
Comparator.comparing(类::属性一,Comparator.reverseOrder());
两种排序是完全不一样的,一定要区分开, reversed()是得到排序结果后再排序,Comparator.reverseOrder()是直接进行排序,理解错误很容易出现混淆,相比较而言Comparator.reverseOrder()更好理解。

3.2根据value值进行升序和降序 

//        实现map集合的value来进行升序或者降序的
        Map<String, User> map=new TreeMap<>();
        map.put("k01",new User(3,"bb",80f));
        map.put("k03",new User(1,"zs",100f));
        map.put("k02",new User(2,"aa",90f));
//        map.forEach((k,v)->{
//            System.out.println(k+"="+v);
//        });
        //将当前获取的map集合的entrySet转换成List集合
        Set<Map.Entry<String, User>> entries = map.entrySet();
        List<Map.Entry<String,User>> list=
                new ArrayList<>(entries);

        //集合框架的工具类Collections
        //请注意:要区分Collection和Collections
        //Collection:集合框架的顶层接口
        //Collections:集合框架的工具类
        Collections.sort(list, new Comparator<Map.Entry<String, User>>() {
            @Override
            public int compare(Map.Entry<String, User> a, Map.Entry<String, User> b) {
                return b.getValue().getUname().hashCode()-a.getValue().getUname().hashCode();
            }
        });
        Collections.sort(list,new NameComparator());
        list.forEach(System.out::println);

return b.getValue().getUname().hashCode()-a.getValue().getUname().hashCode();

这串代码关系着你是想要升序还是降序

升序的话,就不变,降序的话,就把a和b调换一下就可以了

那么我们就完成了ヾ(≧▽≦*)o

 

  • 19
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值