集合容器
Collection和Map
Collection集合存储的是一组单列数据
Map集合储存的key-value键值对数据,可以通过key定位到value,通过hashcode和equals方法保证键不重复
Collection接口主要有List接口和Set接口
List接口有序的储存数据,可以储存重复的数据,允许null值
Set接口无序的储存数据,不允许重复的数据,只允许一个null值
List接口主要有ArrayList,Vector,LinkedList实现类
ArrayList底层是可变数组Object[],默认大小为0,执行add方法时赋初始值10,每次扩容增加0.5倍,是线程不安全的集合,随机访问效率高,修改涉及到数据的移动效率低
Vector类似ArrayList,add方法用synchronized修饰,是线程安全的集合,但是开销大
LinkedList底层是双向链表结构,内部存储的Node节点,每个节点储存着前一个节点和后一个节点还有自身的地址,修改数据时只需要修改内部的指针指向,所以修改效率高.查找数据时要从第一个节点或最后一个
节点开始向后或者向前遍历,非头尾数据的查找效率低
Set接口主要有HashSet和TreeSet实现类
HashSet是根据哈希表实现的,不保证存储顺序,只允许一个null值
TreeSet是基于二叉树实现的,保证存储数据处于排序状态,不允许null值
Map接口主要HashMap,HashTable和TreeMap实现类
HashMap继承自AbstractMap,基于哈希表实现,底层通过数组加链表实现,数组初始容量16,扩容时直接是2倍,非线程安全,允许null键和null值,不保证数据顺序
HashTable继承自Dictionary,基于哈希表实现,底层通过数据加链表实现,数组初始容量11,扩容时直接是2倍+1,线程安全,不允许null键,不保证数据顺序
TreeMap继承自AbstractMap,基于红黑树实现,非线程安全,不允许null键,存入TreeMap的元素应该实现Comparable接口或者实现Comparator接口来保证顺序存储数据