Map集合
Map集合是按<键,值>对的形式存储数据
Map集合的结构图
HashMap工作原理
- HashMap特点:
-
- 底层是哈希表, 哈希表是一个数组, 该数组是在第一次put时才初始化
-
- 默认初始化容量: 16
-
- 默认加载因子: 0.75 , 当<键,值>对的数量>容量 * 加载因子时, 数组扩容
-
- 扩容: 2倍大小
-
- 在定义HashMap时,可以指定初始化容量, 最好是2的幂次方,如果不是系统会自动调整为2的幂次方
-
为了快速计算数组的下标
-
- HashMap的键与值都可以为null
4.11 HashTable
- HashTable
- 1)底层是哈希表, 它是线程安全的, HashMap不是线程安全的
- 2)默认初始化容量:11
-
- 加载因子: 0.75
-
- 扩容: 2 倍 + 1
-
- HashTable也可以指定初始化容量, 不调整大小
-
- HashTable中的键与值都不能为null
4.12 Properties
Properties继承了HashTable, 键与值都是String类型
使用Properties设置/读取系统属性值
4.13 TreeMap
TreeMap类实现了SortedMap接口, 可以根据键自然排序, 要求键必须是可比较的. 可以在构造方法中指定Comparator比较器, 如果没有指定Comparator比较器,要求键实现Comparable接口
Map小结
Map是按<键,值>对的形式存储数据
put( k , v ) remove( k ) containsKey(k) containsValue(v) get(k)
keyset() values() entrySet() size()
---- HashMap
底层是哈希表(散列表), 是一个数组,数组的每个元素又是一个单向链表
默认初始化容量: 16
加载因子: 0.75 <键,值>对的数量>容量 * 加载因子扩容
扩容: 2倍
键与值可以为null
可以指定初始化容量, 系统会自动调整为2的幂次方, 为了快速计算数组的下标
---- HashTable
底层是哈希表, 它是线程安全的, HashMap不是线程安全的
默认初始化容量: 11
加载因子: 0.75
扩容: 2倍 + 1
键与值都不能为null
可以指定初始化容量, 不调整大小
--------Properties
继承了HashTable, 键与值都是String类型
经常用于设置/读取系统属性,
setProperty( 属性名, 属性值) getProperty(属性名)
经常使用Properties读取配置文件信息, 一般情况下在src目录中单独创建一个resources资源文件夹, 在该文件夹中添加配置文件, 在配置文件中保存系统属性, 配置文件扩展名是.properties
---- TreeMap
实现了Sortedmap接口, 根据键自然排序, 要求键必须是可比较的的
在创建TreeMap时在构造方法中指定Comparator比较器, 如果没有Comparator比较器,要求键实现Comparable接口
TreeMap中的键是根据二叉树原理排序的
-----------应用场景------------------------------------------------------------------------------------------
需要保存<键,值>对时选择Map集合
如果不需要根据键排序就选择HashMap
如果需要根据键排序就选择TreeMap, 注意不能根据值排序
注意**************************************************
遇到了HashMap, HashTable等集合,需要重写键的equals()/hashCode()方法
在TreeMap中,判断键是否重复, 根据比较结果是否为0来判断的