Collection---Map
collection 集合继承实现关系(单列集合)
特性:存值有序、可重复、有索引

Collection 有个重要子接口 List和Set ,他们的实现子类都是单列集合
List集合常用方法

底层

第一次初始化的时候list集合就是一个elementData空数组

进入add底层扩容
ensureCapacityInternal 表示 确认容量够或不够 (确认大小是否够添加一条数据)
elementData[size++] 表示 当前传过来的值 索引加一

下一步 会判断elementData 是否为空数组 ,第一次是true max参数中会有两个参数 会选当中的最大的值返回,有一个默认的是10,如果不为空则直接返回所以第一次扩容大小是10 (每一次都会判断是否扩容)

这是确定是否真正的要扩容

modCount++ 表示 当前值被修改的次数,防止多线程中多次赋值,如果多次赋值他会抛出异常
判断表示 如果最小的容量减去当前实际的容量的大小(说明容量不够了)如果 大于0则进入grow方法进行扩容 (实际需要的最小数组为10,实际提供的大小为0 则不够则进入)

进入grow扩容方法 elementData.len(实际大小)赋值给oldCapacity 然后 old 加上1.5倍(自身大小右移(除以2))赋给newCap 进入判断如果实际大小减去实际最小容量小于0
则把实际最小容量赋值给实际大小,然后还有一个判断是对比一个MAX_ARRAY_SIZE的如果实际容量减去它大于0则执行hugeCapacity方法
最后使用Arrays。copyOf方法拷贝值保留原来值(10扩容1.5倍等于15 拷贝进去就是1.....10后面五个null),扩容完后依次返回


带参的arreyList

然后后面add方法跟无指定的是一样的, 只不过扩容的时候是指定值的1.5倍
===================================================================================================
Vector 集合
特点:线程安全,底层自带互斥锁。当有线程安全时考虑使用Vector集合
底层和arrayList差不多 底层方法自带互斥锁

===================================================================================================
LinkedList底层结构

add方法

add二

删除操作 remove
选择

两者线程都不安全没有同步 尽量在单线程中使用
===================================================================================================
hash set
数组加链表结构
模拟 结构了解


优点:高效,一味地数组存储数据效率太低因为底层要进行查询、判断、拷贝、的操作
hash set(也是hashmap的底层)基本结构

add底层原理



重复添加的三种情况

如果hash值相同则不进入if语句 自然也没有for循环一说,直接不返回null,添加失败
机制说明


哈希值一样但是equals判断值不同则列到当前链表中
linkedHashSet
跟hashSet底层差不多 区别是维护了双向链表 存值和取值的顺序相同。双向链表和linkedlist差不多

迭代器
只要是实现了collection接口的类都可用去调用iterator(迭代器)主要用于遍历集合中的所有元素,迭代器都是从父接口(Iterator)传过来的
iteration仅用于遍历集合,本身并不存放对象。 (增强for = 简化版迭代器 底层也是调用迭代器 new了一个迭代器)

注意:

List集合add方法实际add的是对象形式
=================================================================
Map 集合继承实现关系 (双列集合)

Map 接口实现子类都是双列结合存放(K-V)
=================================================================
hashMap


源码:





=================================================================
hashTable
底层扩容原理
hashmap和hashtable

=================================================================
集合的选择


浙公网安备 33010602011771号