集合类又称为容器。
集合类与数组的不同之处:
1.数组长度固定,集合长度可变。
2.数组保存的必须是同一类型的元素,集合可以任意类型。
3.数组增加删除元素比较麻烦,集合代码比较简洁。
Collection
Set 接口和 List 接口实现了 Collection 接口
遍历方式:
1.迭代器
2.集合增强for
3.有些可以用普通for
Set 接口:Set集合不允许存在重复值,无序无索引
实现:HashSet、TreeSet、LinkedHashSet
HashSet:元素无序唯一,结构为哈希表,内部实现为HashMap
HashMap:数组+链表+红黑树
扩容机制:链表元素个数超过默认值(8) 且 表的大小大于默认大小(64)进行树化
初始表的大小为16,加载因子为0.75,阈值为12
LinkedHashSet:HashSet的子类,底层是数组+双向链表,存放的是Entry类型对象
TreeSet:元素有序唯一,结构为二叉树
List 接口:线性方式存储对象,有序,可以通过对象的索引来操作对象,可以包含重复对象
常见实现:ArrayList、LinkedList、Vector
ArrayList:可变数组,允许所有元素,包括null,适合快速的随机访问,线程不安全
底层:维护一个transient Object[]数组
扩容机制:如果是无参构造,第一次添加扩容为10,以后为1.5倍
如果是有参构造,初始容量为指定大小,以后也为1.5倍
Vector:底层也是数组,线程安全,扩容与Array不同的是后期按照2倍扩容,效率不如Array
LinkedList:实现双向链表和双端队列特点,便于插入和删除,线程不安全,增删效率较高,改查效率较低
Map 接口:提供了将键映射到值的对象。每个键最多只能映射到一个值(重复替换)。
遍历方式:
1.取出Key,通过Key取出Value
增强for
迭代器
2.把所有的value取出
增强for
迭代器
3.通过EntrySet获取
增强for
迭代器
实现:HashMap、TreeMap、HashTable
TreeMap:红黑树实现,有序,不允许键为null,
HashMap:基于哈希表的Map接口的实现,允许null值和null键,线程不安全
为了方便遍历,在entrySet中定义了类型Map.Entry,实际存放Node类型
HashTable:继承字典类,键值都不允许为空,底层有一个entry初始大小为11。线程安全。
扩容机制:初始为11,之后每次2倍+1
Properties:HashTable的子类,可以用于从xxx.properties文件中加载propertie对象。