![ea3d98fd62310132101984186dba700a.png](https://i-blog.csdnimg.cn/blog_migrate/745e0e21fcee3f6b1054dd3f7e25db79.jpeg)
首先介绍一下Collection接口和Map接口的继承体系:
- Collection接口:
![0dc1fffbc90786f37ea28f70afd1c652.png](https://i-blog.csdnimg.cn/blog_migrate/202cb538f25ffa0d7bb01bbfc5964e3a.jpeg)
2. Map接口:
![891837959d82bf975bf7215b705a05bf.png](https://i-blog.csdnimg.cn/blog_migrate/294ed204dab749a6ab70fd70ff7c8d92.png)
①Set 和 Map 的关系
- Map集合的所有Key具有set的特征。
- 若将Map的key-value对视作整体,则Map也可视作set
Map本质上是一个关联数组:key数组 + value数组,将一一对应的key和value绑定在一起就形成了Map
②HashSet 和 HashMap
- HashSet:系统使用Hash算法决定元素的存储位置
- HashMap: 系统将value当成key的附属物,根据Hash算法决定key的存储位置
当程序执行put方法时,系统将调用键名的hashCode方法得到其hashCode值,之后系统将根据该hashCode值决定该元素的存储位置。 创建HashMap时可传入初始capacity 和 load factor, initial capacity默认为16,load factor默认为0.75。 HashMap中:
1. size变量保存了map中包含的key-value对的数量
2. threshold变量包含了HashMap能容纳的key-value对的极限,等于HashMap的容量乘以负载因子(load factor)
3. 当size++ >= threshold,HashMap会自动调用resize方法扩充HashMap的容量。每扩充一次HashMap的容量就增大一倍
4. 当创建一个HashMap时,系统会自动创建一个table数组来保存HashMap中的entry
// HashMap构造器:
Java集合实际上是多个引用变量所组成的集合,这些引用变量指向实际的Java对象
ArayList底层是基于数组实现的。每次创建ArrayList时传入的int参数是它所封装的数组长度。若创建时未传入参数,那么ArrayList的初始长度为0,底层封装的数组长度为10。