Map集合概述和特点
Map集合概述
interface Map<K,V> K:键的类型;V:值的类型
Map集合特点
- Map集合是一个双列集合,键值对映射关系
- 一个键对应一个值
- 键不能重复,值可以重复
- 元素存取无序
Map接口下的集合与Collection接口下的集合对比
Map常用子类
HashMap
Java.util.LinkedHashMap<k,v>集合 extends HashMap<k,v>接口
HashMap的特点:
1.HashMap集合底层是哈希表:查询速度特别快
JDK1.8之前:数组+单向链表
JDK1.8之后:数组+单向链表/红黑树(链表的长度不超过8,提高查询速度)
2.HashMap集合是一个无序的集合,存储元素和取出元素的顺序有可能不一致
LinkedHashMap
java.util.LinkedHashMap<k,v>集合 extends HashMap<k,v>集合
LinkedHashMap的特点:
1.LinkedHashMap集合底层是哈希表+链表(保证迭代的顺序)
2.LinkedHashMap集合是一个有序的集合,存储元素和取出元素的顺序是一致的
Map接口中的常用方法
V put(K key,V value) 添加元素
V remove(Object key) 根据键删除键值对元素
void clear() 移除所有的键值对元素
boolean containsKey(Object key) 判断集合是否包含指定的键
boolean containsValue(Object value) 判断集合是否包含指定的值
boolean isEmpty() 判断集合是否为空
int size() 集合的长度,也就是集合中键值对的个数
Map集合遍历键找值方式
Map集合的第一种遍历方式:通过键找值的方式
Map集合中的方法:
Set<K> keySet() 返回此映射中包含的键的 Set 视图。
实现步骤:
1.使用Map集合中的方法keySet(),把Map集合所有的key取出来,存储到一个Set集合中
2.遍历set集合,获取Map集合中的每一个key
3.通过Map集合中的方法get(key),通过key找到value
Map集合遍历的第二种方式:使用Entry对象遍历
Map集合中的方法:
Set<Map.Entry<K,V>> entrySet() 返回此映射中包含的映射关系的 Set 试图
实现步骤:
1.使用Map集合中的方法entrySet(),把Map集合中多个Entry对象取出来,存储到一个Set集合中
2.遍历Set集合,获取每一个Entry对象
3.使用Entry对象中的方法getKey()和getValue()获取键与值
LinkedHashMap集合
java.util.LinkedHashMap<K,V> entends HashMap<K,V>
Map 接口的哈希表和链接 列表实现,具有可预知的迭代顺序。
底层原理:
哈希表+链表(记录元素的顺序)
Hashtable集合
Java.util.Hashtable<K,V>集合 implements Map<K,V>接口
Hashtable:底层也是一个哈希表,似乎一个线程安全的集合,是单线程集合,速度慢
HashMap: 底层是一个哈希表,是一个线程不安全的集合,是多线程的集合,速度快
HashMap集合(之前学的所有集合):可以存储null值,null键
Hashtable集合,不能存储null值,null键
Hashtable和Vector集合一样,在JDK1.2版本之后被更先进的集合(HashMap,ArrayList)取代了
Hashtable的子类Properties依然活跃在历史舞台
Properties集合是一个唯一和IO流相结合的集合
JDK9对集合添加的优化_of方法
JDK9的新特性:
List接口,Set接口,Map接口:里面增加了一个静态的方法of,可以给集合一次性添加多个元素
static <E> List<E> of (E... elements)
使用前提:
当集合中存储的元素的个数已经确定,,不在改变时使用
注意:
1.of方法只适用于List接口,Set接口,Map接口,不适用于接口的实现类
2.of方法的返回值是一个不能改变的集合,集合不能再使用add,put方法添加元素,会抛出异常
3.Set接口和Map接口在调用of方法的时候,不能有重复的元素,否则会抛出异常
网友评论