Map
Map
-
区别与集合,在《Core Java》中称为 映射
-
有key有value key -> value
-
Map与Collection的区别
-
Map集合的特点
将
键
映射到值
对象上,一个映射
(Map)不可包含重复的键,每个键最多只能映射一个值1个key对应一个value
-
区别
-
Map存储的元素是成对出现的,Collection存储的元素是单个出现的
-
Map的键是唯一的,Collection的List接口是可重复的,Set接口是唯一的
-
Map的值可以重复
1 -> a 2 -> a
-
-
要点
Map集合的数据结构针对键有效,跟值无关
Collection集合的数据结构针对元素有效
-
-
Map的功能
- 添加
- V put(K key, V value);
- 键不存在的情况下,直接存储元素,会返回null
- 键存在的情况下,新值替换旧值,返回旧值
- 删除
- void clear(); 移除所有的
键值对
元素 - V remove(Object key); 根据键值删除,返回删除值
- void clear(); 移除所有的
- 判断
- Boolean containKey(Object key); 判断集合是否包含指定的Key
- Boolean containsValue(Object value); 判断集合是否包含指定的value
- Boolean isEmpty(); 判断集合是否为空
- 获取
- Set<Map.Entry<K, V>> entrySet(); 返回键值对对象集合
- v get(Object key); 根据键获取值
- Set
keySet(); 返回所有键组成的集合 - Collection
values(); 获取所有值的集合
- 大小
- int size(); 返回Map集合中
键值对的对数
- int size(); 返回Map集合中
- 添加
-
继承体系
-
散列表
-
不在意元素的顺序,能够快速的查找元素数据
-
工作原理
-
散列表为其中的每一个对象计算出一个整数,称之为
散列码
。根据散列码
保存在对应的位置 -
在java中,散列表用的是【数组+链表】的实现,每一个列表称之为
桶
=> 底层数组的一个位置 -
散列冲突
-
一个桶上可能会遇到被占用的情况(hashCode散列码相同,存储到了同一个位置上(
存储到同一个桶上了
)) -
如何避免,或者解决
- 此时需要该对象与桶上的对象进行比较,看看该对象是否存在桶上,存在就不添加,反之添加
- hashCode算法足够好,桶的数目足够多可以避免
- JDK1.8中,桶满时会从链表变成平衡二叉树
-
装载因子:决定何时对散列表进行
在散列
再散列:创建一个桶数更多的散列表,将原有的元素插入到新的桶中
-
装载因子默认值是 0.75
如果表中的元素个数已经超过了75%那么就会用一个双倍
桶数
的散列表进行再散列
-
-
-
-
红黑树
- AVL树:最早的平衡二叉树之一,windows对进程地址空间的管理用到过
- 红黑树,平横二叉树
- B/B+树:磁盘文件组织 数据索引 数据库索引
- Trie树(字典树)用于统计排序大量的字符串
-
二叉查找树