Chp17-Map

目录

存储特点

常用实现类

创建

常用方法

遍历

使用


存储特点

  1. 以键值对的形式存放

  2. 键: 无序,无下标,元素不可重复

  3. 值: 无序,无下标,元素可以重复

常用实现类

  1. HashMap

    • JDK1.2 底层哈希表实现 线程不安全,效率高

  2. LinkedHashMap

    • JDK1.2 是HashMap的子类,底层哈希表实现 线程不安全,效率高

  3. TreeMap

    • JDK1.2 是SortedMap的实现类,底层红黑树实现 线程不安全,效率高

  4. Hashtable

    • JDK1.0 底层哈希表实现 线程安全,效率低

  5. Properties

    • JDK1.0 是Hashtable的子类,底层哈希表实现 线程安全,效率低

创建

  • 建议使用多态

    Map<键的泛型,值的泛型> 集合名=new 实现类名<>();

常用方法

K: key-键

V: value-值

  1. V put(K,V) : 添加键值对至集合末尾

    • 当键未存在,则添加, 当键已经存在, 则进行值的覆盖

  2. boolean containsKey(K): 判断集合中是否包含指定键

  3. boolean containsValue(V): 判断集合中是否包含指定值

  4. V get(K): 根据键获取对应的值

  5. V remove(K): 根据键移除整个键值对

  6. int size(): 获取集合元素个数

    • 一个键值对是一个元素

遍历

  1. 键遍历

    • 思路: 先获取到集合的所有键, 遍历键,根据需求通过键获取值

    • Set<K的泛型> keySet(): 获取所有的键放入Set集合返回

            //1. 获取所有的键
            Set<String> set1 = map.keySet();
            //2. 遍历所有的键
            for (String k : set1) {
                //获取键和值查看
                System.out.println(k+" - "+map.get(k));
            }
  2. 值遍历

    • 思路: 获取所有的值进行遍历

    • Collection<V的泛型> values(): 获取所有的值放入Collection类型的集合返回

            //1. 获取所有的值
            Collection<String> coll = map.values();
            //2. 遍历所有的值
            coll.forEach(v-> System.out.println(v));
  3. 键值对遍历

    • 思路: 将键值对存入对象, 返回所有的键值对对象, 再遍历对象获取出键和值

    • Set< Map.Entry<K的泛型,V的泛型> > entrySet(): 获取所有的键值对对象存入Set集合返回

      • Map.Entry<K的泛型,V的泛型> : 是Map接口的内部接口, 表示键值对,一个Entry对象可以存储一个键值对的内容

      • 从Entry对象中获取键值的数据

        Entry对象.getKey(): 获取键
        Entry对象.getValue(): 获取值
    //1. 获取接收所有的键值对对象
            Set<Map.Entry<String,String>> set2=map.entrySet();
            //2. 遍历所有的键值对对象
            for (Map.Entry<String, String> entry : set2) {
                //从键值对对象中获取出键和值的内容
                System.out.println(entry.getKey()+" - "+entry.getValue());
            }
  4. 自遍历

    • 思路: 利用forEach方法结合接口实现遍历

    • forEach(BiConsumer实现类对象)

    System.out.println("自遍历-匿名内部类:");
            map.forEach(new BiConsumer<String, String>() {
                @Override
                public void accept(String key, String value) {
                    System.out.println(key+" - "+value);
                }
            });
            System.out.println("自遍历-lambda简化:");
            map.forEach((k,v)->System.out.println(k+" - "+v));

使用

  1. 底层哈希表实现的集合, 必须重写hashCode()和equals()才能保证自定义的键不重复

  2. LinkedHashMap可以保证元素存入和取出的顺序一致

  3. TreeMap可以根据键进行默认的升序排序

    • 如果键为自定义类型, 则必须提供排序规则(两种方式与TreeSet一致)

    • 当键为null时, 排序会导致空指针

      • 必须在书写排序规则时对null值做转换处理

    Map<Worker, String> map = new TreeMap<>((o1,o2)->{
                //判断当前对象是否为null, 为null转换为数字, 不为null获取真实工资数值
                double s1 = o1 == null ? -1 : o1.getSalary();
                double s2 = o2 == null ? -1 : o2.getSalary();
                //根据工资从低到高
                if (s1 > s2) {
                    return 1;
                } else if (s1< s2) {
                    return -1;
                }
                return 0;
            });
            map.put(new Worker("zhangsan", 30, 9000), "经理");
            map.put(new Worker("zhangsan", 30, 9000), "副总");
            map.put(new Worker("李四", 30, 6000), "主管");
            map.put(new Worker("王五", 30, 5000), "职员");
            map.put(null, "职员");
  4. Hashtable不允许空值空键

    • HashMap允许空值和空键, 至多存在一个null键,可以存在多个null值

  5. Properties集合只能存储String类型的数据

    • 不建议使用多态

    • 不能添加泛型

    • 常用独有方法:

      1. V getProperty(K): 根据键获取值,相当于Map中的get方法
      2. V setProperty(k,V): 添加键值对到集合末尾,相当于Map中的put方法
      3. load(输入流): 通过输入流将指定配置文件中的内容加载到集合中
  • 22
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值