Java——类集框架:Map集合的详解及应用举例(HashMap、Hashtable、TreeMap)

举报
Winter_world 发表于 2021/09/28 22:50:59 2021/09/28
【摘要】 目录 1、Map接口的定义 2、HashMap子类 3、Hashtable子类(旧的子类) 4、排序的子类:TreeMap 5、利用Iterator输出Map集合 6、自定义Map中的key 7、总结 1、Map接口的定义 Map保存的是二元偶对象,简单说就是两个值,key和value。使用中可以通过key查找到va...

目录

1、Map接口的定义

2、HashMap子类

3、Hashtable子类(旧的子类)

4、排序的子类:TreeMap

5、利用Iterator输出Map集合

6、自定义Map中的key

7、总结


1、Map接口的定义

Map保存的是二元偶对象,简单说就是两个值,key和value。使用中可以通过key查找到value数据,使用Map可以方便用户查询。

Map中定义的关键操作方法:

名称 作用
public V put(K key, V value)  向集合中追加数据
public V get(K key) 根据key返回对应的value数据
public Set<K> keySet()   返回Map中的所有key
public Set<Map.Entry<K,V>> entrySet() 将Map集合转换为Set集合

    Map接口中有两个常用的子类:HashMap、Hashtable,通过这两个子类进行Map的实例化。

2、HashMap子类

HashMap接口在JDK1.2中开始定义,开发中应用的最多的一个子类。

 【举例】:Map的基本操作


  
  1. Map<String,Integer> map = new HashMap<>();
  2. map.put("张三",10);
  3. map.put("李四",20);
  4. map.put("赵五",18);
  5. System.out.println(map);

Map集合的数据是无序的,也不需进行排序,因为Map集合应用的目的不是为了输出,是为了查询使用。

Map可以保存null值,但这种输出的操作形式并不理想,因为Map主要就是用于查询使用,key不存在值,返回为null。

【举例】Map接口中i当以有keySet方法,可以获取全部key的信息:


  
  1. Map<String,Integer> map = new HashMap<>();
  2. map.put("张三",10);
  3. map.put("李四",20);
  4. map.put("赵五",18);
  5. map.put(null,0);
  6. map.put("empty",null);
  7. Set<String> set =map.keySet();
  8. Iterator iterator = set.iterator();
  9. while (iterator.hasNext()){
  10. System.out.println(iterator.next());
  11. }

注意:如果Map集合中使用重复的key保存,则旧内容将被新内容覆盖。

3、Hashtable子类(旧的子类)

Hashtable与Vctor、Enumeration都是JDK1.0推出,1.2后重新设计,1.2后其也变成了Map的子类。HashMap与Hashtable的具体区别是什么呢?(区别类似于ArrayList与Vector):

序号 区别点 HashMap(90%) Hashtable(20%)
1 推出时间 JDK1.2 JDK1.0
2 性能 异步处理,性能较高 同步处理,性能较低
3 安全性 非线程安全的操作 线程安全操作
4 保存null key或value允许为null
不允许为null  

开发中无法回避null的问题,所以最好使用HashMap.

4、排序的子类:TreeMap

了解即可,该子类保存的数据可以实现key排序操作,TreeMap 的value可以保存null,Key不可以保存null,key的排序一定是参照comparable接口的执行结果。


  
  1. Map<Integer,String> map = new TreeMap<>();
  2. map.put(1,"大哥");
  3. map.put(3,"老三");
  4. map.put(2,"老二");
  5. System.out.println(map);

5、利用Iterator输出Map集合

在Collection接口中会提供iterator()方法,可以直接为Iterator接口实例化,但Map接口未提供,该如何利用Iterator进行输出呢?首先针对Map与Collection数据保存过程做一个比较:

要利用Iterator输出Map集合 数据,首先看下Map.Entry接口,其包括的方法:

  • 取得包装的key:public K getKey();
  • 取得包装的value:public V getValue();

那么,Map接口基于Iterator输出的步骤如下:

1)利用Map接口中的entrySet方法将Map集合变为Set集合;

2)Set集合定义了iterator()方法,可以实例化Iterator接口;

3)利用Iterator接口迭代输出,找出每个Map.Entry接口对象,利用getKey()与getValue()方法获取对应值。

【举例】:利用Iterator输出Map集合


  
  1. Map<String,Integer> map = new HashMap<>();
  2. map.put("张三",10);
  3. map.put("李四",20);
  4. map.put("赵五",18);
  5. Set<Map.Entry<String,Integer>> set = map.entrySet();
  6. Iterator<Map.Entry<String,Integer>> iterator = set.iterator();
  7. while (iterator.hasNext()){
  8. System.out.println(iterator.next());
  9. }
 

6、自定义Map中的key

不再写代码举例,既然涉及查找,就涉及到对象是否想等比较,自定义的key  类 要覆写hashCode()、equals()方法,否则查找无效。实际开发过程中,Map的核心功能就是查找,优先考虑的key类型为Interger、String类型,这两个都已经覆写了hashCode()、

equals(),写实现了Comparable接口,因此在开发中不建议使用自定义类型。

7、总结

1)Mapj接口主要进行查询应用,常用的子类为HashMap,可以保存null;

2)Map使用Iterator输出的步骤方法;

3)建议使用系统类String、Integer作为key类型,不使用自定义的key。

 

作于202003141240,已归档

———————————————————————————————————

本文为博主原创文章,转载请注明出处!

若本文对您有帮助,轻抬您发财的小手,关注/评论/点赞/收藏,就是对我最大的支持!

祝君升职加薪,鹏程万里!

文章来源: winter.blog.csdn.net,作者:Winter_world,版权归原作者所有,如需转载,请联系作者。

原文链接:winter.blog.csdn.net/article/details/104698036

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。