对于集合容器
1.collection接口有俩个子接口set和list ,set装的是无序的,不能重复的, List装的是有序的,可以重复,
2.map 接口 存储一对一键值对的
3.ArrayList 底层是数组,LinkedList 底层是链表, 遍历这俩个容器 但是它们父接口 Collection 有个iterator方法,使用iterator遍历(这个方法统一遍历集合类,remove是删除元素唯一安全方法)
4.HashSet 不能重复,无序的。
5.Array 读快改慢
6.Linked 改快读慢
Collections
集合类的工具类(List接口和Set接口),类比Arrays和数组。
方法:
Collection.sort(List)对List排序
Collection.shuffle(List) 对List内对象随机排列
Collection.reverse(List) 对List内的对象逆序排列
Collection.fill(List)用一个对象,重写List容器
copy(List dest,List src )拷贝src 到dest
Collection.binarySearch()二分查找
没有泛型,从集合中取出,需要转型,效率低,
ArrayList
1.底层实现是数组,数据结构是线性表(连续的元素、连续的存储空间、有首有尾、相互连接)
2.jdk1.8之前初始容量是10,jdk1.8之后初始容量是0(存入第一个元素后,容量为10)
3.扩容为原容量的1.5倍
4.有序的、可重复、可为null、有索引(会越界)
5.查找较快,插入删除较慢
6.不同步的、线程不安全的
LinkedList
1.底层数据结构双向链表,也可以作为队列(先进先出),栈(先进后出)
2.没有扩容的概念
3.有序的、可重复、可为null、有索引
4.查找较慢,插入删除较块
5.不同步的、线程不安全的
Vector
1.底层实现是数组,数据结构是线性表
2.默认初始容量是10
3.默认扩容为原容量的2倍
4.有序的、可重复、可为null、有索引(会越界)
5.查找较快,插入删除较慢
6.同步的、线程安全的、效率低
Stack
1.继承了Vector类
2.实现类栈数据结构
3.同步的,线程安全的,效率低
HashSet
1.底层实现是HashMap的key
2.默认初始容量16,默认加载因子0.75
当容量达到原容量*0.75倍,扩容原容量的1.75倍
3.不保证顺序、不能重复、可以为null
4.查找较慢,插入删除较快
5.不同步的、线程不安全的
TreeSet
1.底层实现是TreeMap,数据结构是二叉树
2.不保证顺序,但是可以自定义排序、不可重复、可为null
3.不同步的、线程不安全的
4.TreeSet中只能存放可排序的对象
5.实现排序功能
1.让元素具有排序功能
元素类实现Comparable接口,重写compareTo方法。
1.这个比较方法要求我们返回int类型的比较结果;
如果实现是:this.getArg() - o.getArg(),按照升序排列,
否则按照降序排列。
2.在添加元素时,会自动调用该方法,比较判断存储顺序。
2.让容器具有排序功能
1.创建比较器类,实现Comparator接口,重写compare方法。
2.使用有参构造new TreeSet<>(比较器类的对象)
HashMap:
1.底层数据结构:
数组 + 单链表 + 红黑二叉树(提高查询效率)
2.相关常量
DEFAULT_INITIAL_CAPACITY = 1 << 4 初始容量是16
DEFAULT_LOAD_FACTOR = 0.75f 加载因子0.75
当容量达到 原容量*0.75 时,扩容一倍
MAXIMUM_CAPACITY = 1 << 30 容量上限
TREEIFY_THRESHOLD = 8 当容量达到8的时候,数据结构由单链表转为红黑二叉树
UNTREEIFY_THRESHOLD = 6 当容量降到6的时候,数据结构由红黑二叉树转为单链表
3.无序、key不可重复、value可重复、key和value都可以为null
4.不同步的、线程不安全的