欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > Java基础集合(Map)

Java基础集合(Map)

2025/5/24 15:05:12 来源:https://blog.csdn.net/m0_67244960/article/details/144294989  浏览:    关键词:Java基础集合(Map)

存储特点

  1. 以键值对的形式存储, 一个元素由两个值组成

  2. 键(K-key): 无序, 无下标, 元素不可重复

  3. 值(V-value): 无序, 无下标, 元素可以重复

常用实现类

 

  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 实现类名<>();

常用方法

  • 集合名.方法名(实参列表)

  1. 旧V put(K, V): 向集合添加一个键值对

    • 如果键已经存在, 则进行值的覆盖

  2. V get(K): 根据键获取对应的值 , 键不存在, 则返回null

  3. boolean containsKey(K): 判断集合是否存在指定键

  4. boolean containsValue(V): 判断集合是否存在指定值

  5. int size(): 获取集合键值对的个数

  6. V remove(K): 根据键删除整个键值对

遍历

  1. 键遍历

    • 思路: 先获取集合所有的键, 遍历键根据键获取值

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

    //创建Map集合, 存储用户信息Map<String, String> map = new HashMap<>();map.put("username", "zhangsan");map.put("username", "lisi");map.put("tel", "15512347896");map.put("pwd", "15533333333");map.put("address", "郑州");
    ​//键遍历//1. 获取所有的键Set<String> set1 = map.keySet();//2. 遍历所有的键for (String k : set1) {//3. 根据键获取对应的值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. 键值对遍历

    • 思路: 直接获取所有的键值对-> 将键值对存入一个键值对对象, 以对象集合的形式返回, 再遍历所有的键值对对象, 获取键与值

    • Entry接口: 存储一个键值对的接口, 是Map的内部接口, 表现形式为Map.Entry<键的泛型, 值的泛型>

      • Entry对象.方法名():

      • K getKey(): 获取entry对象存储的键

      • V getValue(): 获取entry对象存储的值

    • Set<Entry类型> entrySet(): 将键值对存入Entry对象, 并将所有的Entry对象存入Set集合返回

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

    • 思路: 将集合元素传入BiConsumer的方法作为实参, 执行方法操作元素

    • 集合名.forEach(BiComsumer实现类对象)

    • JDK8.0

            System.out.println("\n自遍历-匿名内部类:");map.forEach(new BiConsumer<String, String>() {@Overridepublic void accept(String k, String v) {System.out.println(k+"   ->    "+v);}});System.out.println("\n自遍历-lambda:");map.forEach((k,v)-> System.out.println(k+"   ->    "+v));

使用

  1. 底层哈希表实现的几个实现类: 当键为自定义类型时, 必须重写其hashCode()和equals()才能保证键的去重

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

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

    • 当键为自定义类型时, 必须自定义排序规则, 两种方式与TreeSet一致

    • 当返回值为0时去重

  4. Hashtable无法存储null值

    • HashMap可以存储null值, 键至多存在一个null, 值可以存在多个null

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

    • 不推荐使用多态

    • 不能添加泛型

    • 常用方法:

      1. setProperty(k,v): 添加键值对的方法, 与Map中的put()一致

      2. V getProperty(K): 根据键获取值, 与Map中的get(K)一致

      3. load(输入流对象): 通过指定IO流将配置文件中的内容加载到集合中

今日掌握

  1. Map的存储特点

  2. 常用实现类和特点

  3. 创建语法

  4. 遍历方式

  5. 各个实现类的使用特点

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词