文章目录
一、集合体系
1.集合概念
对象的容器。
数组可以存基本类型和引用类型。集合只可以存引用类型。
2.集合体系集合
3.Collection常用方法
boolean add(E e)
void clear()
boolean remove(E e)
boolean contains(Object o)
int size()
Iterator<E> iterator()返回一个迭代器
迭代器的方法
boolean hasNext() 有下一个元素
E next() 指向下一个元素并返回
remove()
Connection只是一个接口,并没有实现方法。
二、List集合
1.List接口
有序,有下标,不重复
迭代器 ListIterator extends Iterator
可以调用hasPrevious和previous方法向前遍历(需先将指针移到最后)
2.ArrayList集合
存储结构:名为elementData的动态数组。
初始化,可以使用无参和有参构造函数(参数为int 长度)
数据量为0时,长度为0,添加数据后,长度为10
扩容机制:
/**
* 要分配的最大数组大小
*/
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
/**
* ArrayList扩容的核心方法。
*/
private void grow(int minCapacity) {
// oldCapacity为旧容量,newCapacity为新容量
int oldCapacity = elementData.length;
//将oldCapacity 右移一位,其效果相当于oldCapacity /2,
//我们知道位运算的速度远远快于整除运算,整句运算式的结果就是将新容量更新为旧容量的1.5倍,
int newCapacity = oldCapacity + (oldCapacity >> 1);
//然后检查新容量是否大于最小需要容量,若还是小于最小需要容量,那么就把最小需要容量当作数组的新容量,
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
// 如果新容量大于 MAX_ARRAY_SIZE,进入(执行) `hugeCapacity()` 方法来比较 minCapacity 和 MAX_ARRAY_SIZE,
//如果minCapacity大于最大容量,则新容量则为`Integer.MAX_VALUE`,否则,新容量大小则为 MAX_ARRAY_SIZE 即为 `Integer.MAX_VALUE - 8`。
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity);
}
遍历集合
LinkedList集合
存储结构:双向链表
结点 E Node(Node prev,E e,Node next)
Vector集合
线程安全,数组
三、Set集合
1.Set接口
特点:(1)无序,没有下标 (2)不能重复
2.HashSet集合
存储结构:哈希表
存储过程:
(1)根据hashcode计算保存的位置,如果此位置为空,则直接保存,如果不为空则执行第二步。
(2)再执行equals方法,如果equals为true,则认为是重复;否则 ,形成链表。
3.TreeSet集合
四、Map集合
1.Map集合体系
2.Map接口
Map<K,V> 存键值对(映射)
键:无序,无下标,唯一
值:无序,无下标,不唯一
Map的常用方法
V put(K key,V value) 存
Object get(Object key) 取
V remove(K key) 删
Set<K> keySet() 返回所有的键
Set<Map.Entry<K,V>> entrySet() 返回Map.Entry的Set集合
boolean containsKey(K key) 是否有为key的键
boolean containsValue(V value) 是否有为value值
Map.Entry的方法
getKey(