集合框架:容器框架、容器类
一、定义
可以存放一系列基本数据类型数据或者引用数据类型对象的对象。
二、分类:
1.数组:
特性:
1.在内存中,连续的固定长度的空间。
2.存储相同数据类型的数据。
3.有索引,从0开始,不能越界。
4.查找较快,插入和删除较慢。
2.List
ArrayList**、LinkedList*、Vector、Stack
特征:有序的、不唯一的、可为null、有索引
ArrayList
底层实现是数组,数据结构是线性表
有序的,不唯一,可为null,有索引(会越界)
初始容量是10,不够使用时扩容为原容量的1.5倍
查找较快,插入删除较慢
线程不同步,多线程使用不安全
实现同步:List list = Collections.synchronizedList(new ArrayList(…));
遍历方式:fori, foreach, iterator, forEach(), stream()
LinkedList
底层实现是node节点,数据结构是双向链表,也可以作为栈(先进后出)和队列(先进先出)
数据结构是链表,没有扩容的概念
有序的,不唯一,有索引,可为null
查找较慢,插入删除较慢
线程不同步的,多线程使用不安全的
List list = Collections.synchronizedList(new LinkedList(…));
list接口的方法(索引的操作)
add(E e)
get()
set()
remove()
clear()
isEmpty()
size()
indexOf()
LastIndexOf()
contains()
Deque接口的方法(首尾元素的操作)
addFirst(E e)
addLast(E e)
getFirst()
getLast()
offer(E e)
offerFirst(E e)
offerLast(E e)
peek()
peekFirst()
peekLast()
poll()
pollFirst()
pollLast()
push(E e)
pop()
Vector
底层实现是数组,数据结构是线性表
初始容量是10,每次扩容为原容量的2倍
线程同步的,多线程使用安全,单线程使用效率低
3.Set
HashSet*、LinkedHashSet、TreeSet*
特征:无序(LinkedHashSet有序,TreeSet可排序),唯一,可为null,无索引
HashSet
底层实现是HashMap的 key
默认初始化容量是16,加载因子是0.75,当存储的数据到达容量的0.75,扩容为原容量的2倍
容量上限为 MAXIMUM_CAPACITY = 1 << 30
不保证顺序(存入的顺序和实际排列顺序无关,获取元素时的前后顺序由Map中的hash()方法得到的混淆后的hash值决定),唯一,无索引,可为null
查找较慢,插入删除较快
线程不同步的,多线程使用不安全
Set set = Collections.synchronizedSet(new HashSet(…));
LinkedHashSet
继承了HashSet类,底层实现HashMap,数据结构是链表
保证顺序,唯一,可为null
查找较慢,插入删除较快
线程不同步,多线程使用不安全
TreeSet
底层实现是TreeMap , 数据结构是二叉树
不保证顺序(可以自定义排序),唯一,可为null
线程不同步,多线程使用不安全
TreeSet只能存储可排序的对象
1.元素具有可排序功能
元素类实现Comparable接口,重写CompareTo()方法,在元素被添加进容器时,会调用CompareTo方法和已经存在的元素进行比较
2.让容器具有排序功能
创建一个比较器类,实现Comparator接口,重写compare方法,使用TreeSet的有参构造创建对象,参数为创建的比较器类的对象
4.Map
HashMap**、LinkedHashMap、TreeMap、Hashtable、Properties**
HashMap
数据结构:数组 + 单链表 + 红黑二叉树
初始容量是16,加载因子是0.75,当存储的数据到达容量的0.75 时,扩容为原容量的2倍,容量上限为 1 << 30
无序,key唯一,value不唯一,key和value都可以为null
常用方法
put(key, value)
get(key)
remove(key)
size()
clear()
isEmpty()
containsKey(key)
containsValue(value)
keySet()
values()
entrySet()
遍历方式
keySet获取所有key,通过key获取所有value
entrySet获取包含多个entry对象的set集合,然后遍历set集合
通过Map集合的forEach()方法遍历
LinkedHashMap
底层实现和HashMap类同,数据结构是链表
有序,key唯一, value不唯一,key和value都可以为null
TreeMap
数据结构是红黑二叉树
无序(可排序,元素具有排序功能或容器具有排序功能),key唯一,key和value都可以为null
线程不同步的,多线程使用不安全
Hashtable
底层数据结构:数组 + 单链表
默认初始容量为11, 加载因子是0.75,当存储的元素个数达到容量的0.75时,扩容为原容量的2倍+1
无序,key唯一,value可重复,key和value都不能为null
线程同步的,多线程使用安全,单线程使用效率低
Properties
继承自Hashtable
可以作为配置信息的存储容器,也可以加载配置文件的配置信息
线程同步的,多线程使用安全
常用方法
setProperty(String key, String value)
getProperty(String key)
getProperty(String key, String defaultValue)
load(InputStream is)
三、体系结构