Map集合

HashMap

  • 由键就决定:无序、不重复、无缩影。HashMap底层是哈希表结构的
  • 依赖hashCode方法保证键的唯一
  • 如果键要存储的是自定义对象,需要重写hashCode和equals方法
  • 基于哈希表。增删改查的性能都较好

LinkedHashMap集合

  • 由键决定:有序、不重复、无索引
  • 这里的有序指的是保证存储和取出的元素顺序一致
  • 原理:底层数据结构是依然哈仪表,只是每个键值对元素有额外多了一个双链表的机制记录存储的顺序
Map<String,Integer>maps=new LinkedHashMap<>();
        maps.put("娃娃",30);
        maps.put("手表",10000);
        maps.put("huawei",10000);
        maps.put("生活用品",10);
        maps.put("手表",10);
        System.out.println(maps);//{娃娃=30, 手表=10, huawei=10000, 生活用品=10}

TreeMap集合概述

  • 由键决定特性:不重复、无索引,可排序
  • 可排序:按照键数据的大小默认升序(由大到小)排序。只能对键排序
  • 注意:TreeMap集合是一定要排序的,可以默认排序,也可以将按照指定的规则进行排序
  • TreeMap跟TreeSet一样底层原理是一样的
    TreeMap集合自定义排序规则有2中
    -类实现Comparable接口,重写比较规则
    在这里插入图片描述

Map集合实现类的特点

  • HashMap:元素按照键是无序,不重复,值不做要求,基于哈希表(与Map体系一致)
  • LinkedHashMap:元素按照键是有序,不重复,无索引,值不做要求
  • TreeMap:元素只能按照键排序,不重复,无索引,值不做要求,可以做排序

Map集合案例-统计投票人数(集合嵌套)

在这里插入图片描述

 public static void main(String[] args) {
        //1.要求程序记录每个学生选择的情况。
        //使用一个Map集合存储
        Map<String, List<String>> data=new HashMap<>();
        //2.把学生选择的数据存入进去。
        List<String> selects=new ArrayList<>();
        Collections.addAll(selects,"A","C");
        data.put("罗勇",selects);

        List<String> selects1=new ArrayList<>();
        Collections.addAll(selects1,"A","C");
        data.put("胡桃",selects1);
        System.out.println(data);//{胡桃=[A, C], 罗勇=[A, C]}

        //3.统计每个景点选择的人数。
        Map<String,Integer> infos=new HashMap<>();
        //4.提取所有人选择的景点的信息。
        Collection<List<String>> values=data.values();
        //values=[[A,B,C,D],[B,C,D],[A,C]]
        for (List<String> value:values){
            for(String s:value){
                //没有包含这个景点
                if(infos.containsKey(s)){
                    infos.put(s,infos.get(s)+1);
                }else{
                    infos.put(s,1);
                }
            }
        }
        System.out.println(infos);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值