1.集合Arraylist列表扩容机制,
数据结构和源码
ArrayList集合特点 :有序(插入顺序) 可重复 允许null元素 线程不安全 扩容1.5倍
增删改查效率:
查询 修改 效率高
删除 和 添加(需要扩容的情况) 效率低
数据结构 : 数组
源代码
关于构造方法:
当我们调用ArrayList无参构造方法 初始化了一个长度为0的空数组
当我们第一次添加元素 将数组的长度改为10
懒加载思想:关于调用无参构造
JDK1.7之前 是直接帮我们初始化一个长度为10的数组
JDK1.8开始 初始化了一个长度为0的空数组 直到我们第一次添加元素 才将数组的长度改为10
这种思想称之为懒加载思想 即不是立即加载 而是等待用的时候再临时加载
关于集合扩容:
第一次扩容 当我们添加第一个元素 数组扩容为10
第二次扩容 当我们添加第11个元素 数组扩容为15 为原数组的1.5倍
关于删除元素:
先检查下标合法性
根据传入的下标 计算 移动元素的个数 size - index - 1
使用System.arraycopy复制数组 将指定下标后一位的元素统一往前移动一位
最后一位置空 赋值为null
关于clear
遍历集合 将集合中的每个元素都赋值为null 等待GC回收没有引用指向的对象
2 Vector
2.1 常用方法
Vector常用方法:
add(Object obj):添加在列表的末尾
add(int index,Object):指定位置添加元素
remove(int index):根据指定下标删除元素
set(int index,Object obj):修改元素
get(int index):获取元素
size():获取元素个数
isEmpty() :判断集合是否为空
clear() :清空集合
LinkedList
3.1 常用方法
Collection
Deque Queue List
LinkedList 常用方法:除了跟ArrayList相同的增删改查方法之外 还单独提供了用于操作头部和尾部的方法
add(Object obj):添加在列表的末尾
add(int index,Object):指定位置添加元素
addFirst() : 添加在链表的头部
addLast():添加在链表的尾部
remove(int index):根据指定下标删除元素
removeFirst() 删除链表头部
removeLast() 删除链表尾部
set(int index,Object obj):修改元素
get(int index):获取元素
getFirst() 获取链表头部
getLast() 获取链表尾部
size():获取元素个数
isEmpty() :判断集合是否为空
clear() :清空集合
4. Map接口
4.1 HashMap
4.1.1 常用方法
Map接口
HashMap 常用方法:
put(Object key,Object value) 添加键值对信息
remove(Object key) : 根据键删除键值对
replace(Object key,Object value) 修改 替换
get(Object key) 根据键获取值
clear() 清空集合
isEmpty() 判断集合是否为空
size() 获取集合元素个数
keySet() 获取所有的键
values() 获取所有的值
entrySet() 获取所有的键值对的组合