Map 详解 两种遍历方式 以及源码解析

Map


由API可知,
  • 将键映射到值对象
  • 一个映射不能包含重复的键
  • 每个键最多只能映射一个值

Map接口与Collection接口不同:
  1. Map是双列的,Collection是单列的
  2. Map的键唯一,Collection的子体系Set是唯一的
  3. Map集合的数据结构值针对键有效,跟值无关,Collection集合的数据结构是针对元素有效

Map<K,V>集合功能概述:

a.添加功能
  • V put(key,value);添加元素
如果键是第一次存储,就直接存储元素,返回null
如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值

b.删除功能
  • void clear();移除所有的键值对元素
  • V remove(Object key);根据键删除键值对元素,并把值返回
c.判断功能
  • boolean containKey(Object key):判断集合是否包涵指定的键
  • boolean containValue(Object value):判断集合是否包涵指定的额值
  • boolean isEmpty();判断集合是否为空
d.获取功能
  • Set<SMap.Entry<K,V>> entrySet());
  • V get(Object.,key):根据键获取值
  • Set<K> keySet():获取集合中所有键的集合
  • Collection<V> values():获取结合中虽有值的集合
e.长度功能
  • int size():返回集合中键值对的个数

Map集合的遍历之键找值(第一种遍历方式)
键找值思路:
  • 通过map.keySet()方法,获取所有键(key)的集合
  • 遍历键的集合,获取到每一个键(key)
  • 根据键找值map.get(key);

简化如下:



Map集合的遍历之键值对对象找值(第二种遍历方式)
键值对对象找值思路:
  1. 通过map.entrySet()方法获取键值对对象集合Set<Entry<K,V>>
  2. 遍历键值对对象获取键(key)和值(value)

Map.Entry接口是Map接口内部的接口,在HashMap中有内部类Entry实现了Map.Entry接口

简化如下:




HashMap
如何保证键的唯一?
HashMap当键(key)是对象(Student)时,如果对象(Student)没有重写hashCode和equals方法,则不会去重,即键值可能会有重复。如果需要去重,则需要重写对象的hashcode和equals方法。

LinkedHashMap是HashMap的子类
特点:底层是链表,所以可实现怎么存怎么取。




TreeMap(存键的底层是二叉树):
如何保证键的唯一?
TreeMap底层是二叉树,所以 类比TreeSet,保证键唯一有两种方式,
  1. 对象继承Comparator接口,重写compareTo方法
  2. 在TreeMap中传入Comparetor对象,重写compareTo方法




HashMap<K,V>与Hashtable<K,V>的区别(面试题)
共同点:底层都是hash算法,都是双列集合

区别:
  1. HashMap线程不安全,效率高,JDK1.2版本
Hashtable是线程安全的,效率低,JDLK1.0版本的

  1. Hashtable不可以存储null键和null值
HashMap可以存储null键和null值













  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值