Map
由API可知,
- 将键映射到值对象
- 一个映射不能包含重复的键
- 每个键最多只能映射一个值
Map接口与Collection接口不同:
- Map是双列的,Collection是单列的
- Map的键唯一,Collection的子体系Set是唯一的
- 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集合的遍历之键值对对象找值(第二种遍历方式)
键值对对象找值思路:
- 通过map.entrySet()方法获取键值对对象集合Set<Entry<K,V>>
- 遍历键值对对象获取键(key)和值(value)
Map.Entry接口是Map接口内部的接口,在HashMap中有内部类Entry实现了Map.Entry接口
简化如下:
HashMap
如何保证键的唯一?
HashMap当键(key)是对象(Student)时,如果对象(Student)没有重写hashCode和equals方法,则不会去重,即键值可能会有重复。如果需要去重,则需要重写对象的hashcode和equals方法。
LinkedHashMap是HashMap的子类
特点:底层是链表,所以可实现怎么存怎么取。
TreeMap(存键的底层是二叉树):
如何保证键的唯一?
TreeMap底层是二叉树,所以
类比TreeSet,保证键唯一有两种方式,
- 对象继承Comparator接口,重写compareTo方法
- 在TreeMap中传入Comparetor对象,重写compareTo方法
HashMap<K,V>与Hashtable<K,V>的区别(面试题)
共同点:底层都是hash算法,都是双列集合
区别:
- HashMap线程不安全,效率高,JDK1.2版本
Hashtable是线程安全的,效率低,JDLK1.0版本的
- Hashtable不可以存储null键和null值
HashMap可以存储null键和null值