Map集合

1.基本概念

  • Map接口在java.util包下;
  • Map是双列集合,将键映射到值Map<K, V>;Collection是单列集合;
  • 一个映射不能包含重复的键,每个键只能映射一个值,值可以重复。

2.子类

  • HashMap:底层是哈希表,不保证映射顺序恒久不变,无序的集合,存和取的顺序有可能不一致;不同步,线程不安全,多线程,速度快;JDK 1.8之前是数组+单向链表;JDK 1.8之后是数组+单向链表/红黑树(使用红黑树的情况是链表的长度超过 8,使用红黑树是为了提高查询的速度);可以存储null值、null键;会自动根据key来排序
  • LinkedHashMap:是HashMap的子类,底层是哈希表+链表,有序;
  • Hashtable:底层是哈希表,键和值不能为null,之前的所有集合都可以存储null值和null键;是最早期的双列集合;是同步的,线程安全,单线程,速度慢;Hashtable和Vector在jdk1.2后被更先进的集合(HashMap和ArrayList)取代,但Hashtable的子类Properties(是唯一个与IO流相结合的集合)依然在用

3.常用方法

  • V put(K key, V value):将指定的键和值放到集合中,存储键值对的时候,若key不重复,则返回null,若key重复,则用新的value替换已存在的value,返回替换前旧的vaule
  • V remove(K key):将指定的键和对应的值移除,返回被移除的值,若key存在,则返回被移除的值,若key不存在,则返回null;尽量使用包装类,少用基本数据类型,防止空指针异常;
  • V get(K key):通过键来获取值,若key存在,返回对应的value值,若key不存在,返回null;
  • boolean containsKey(K key):判断集合中是否包含指定的键,包含返回true,不包含返回false;
  • boolean containsValue(V value):判断集合中是否包含指定的值;
  • Set<K> keySet():获取map集合中的所有键,存储到set集合中;
  • Set<Map.Entry<K, V>> entrySet():获取map集合中所有键值对对象的集合(Set集合)。

4.Entry键值对对象

  • 一对键值对对象被称为一个Entry,在遍历map集合时,就可以从每一个Entry键值对对象中取出每个对象对应的键和对应的值getKey()、getValue();
  • Entry是Map的一个嵌套的内部接口,Map集合一旦创建,就会在Map集合中创建一个Entry对象,用于记录键与值的映射关系,称作键值对对象,类比结婚证。

5.遍历步骤

  • 使用Map集合中的方法EntrySet(),把Map集合中的所有键值对对象(Entry对象)取出来,存储至Set集合;
  • 遍历Set集合(迭代器或增强for循环),获取每一个Entry对象;
  • 使用Entry的方法getKey()和getValue()获取键和值。

6.Map存储自定义类型元素

  • 作为key的自定义类型必须重写hashCode方法和equals方法,以保证key唯一。

7.JDK 9对集合的优化

  • List、Set、Map接口增加了of方法,一次性给集合添加多个元素;List.of("a", "b", "c");
  • 但有一个前提:集合元素的个数确定不再改变
  • of方法只适用于List、Set、Map接口,这些接口的实现类不能用
  • of方法的返回值是一个不能改变的集合,集合不能再使用add或put方法,否则抛出异常;
  • Set接口和Map接口在调用of方法时,不能有重复的元素,否则会抛出异常。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值