数据结构:
一、
1、8大基本数据类型
byte -2e7 -> 2e7-1 -128 -> 127 8位
char 2个字节16位 \u0000 -> \uFFFF
short 2个
int 4个
long 8个
float 4个
double 8个
boolean 1位
2、数组,固定长度的容器
String char[]
3、集合:Collection
List:
ArrayList:
1、基于数组结构。
2、内部的对象数组在序列化时不参与。
3、无参构造器创建的对象初始容量为0(jdk1.8).
4、当集合容量满了就扩容,扩大原来的1/2,grow()方法,内部实现就是对数组的拷贝。
5、使用无参构造器创建ArrayList容量是0,第一次添加元素时,容量扩大为10。
6、使用有参构造创建ArrayList时,扩容机制每次增加1个。
7、线程不安全,效率高
LinkedList:
1、基于链表结构,内部使用Node节点对象来构建。无参构造器创建的链表长度为0,首节点为null,尾节点为null.
2、添加元素的操作,创建新节点,把新节点和prev节点关联,next节点关联。
3、线程不安全,效率高。
4、在集合头部或者中间添加元素时,LinkedList效率高。如果在最后添加元素时,如果ArrayList正好扩容,效率低,如果不需要扩容,ArrayList效率高。
5、删除操作,在头部删除LinkedList效率高。在尾部删除的时候ArrayList效率高,因为LinkedList存在遍历过程。
在中间删除,不好确定,ArrayList存在数据copy操作,LinkedList存在遍历操作。
6、修改操作如果是开头的元素,性能差不多,如果是中间或者后面的元素,ArrayList快。
7、查询ArrayList快。
Vector:
1、内部基于数组结构。
2、线程安全,每个方法都加上了synchronized。
3、通过无参构造创建 Vector容量是10,增量是0.通过两个参数的构造器创建Vector时,初始容量和增量是自己定义的。
4、当需要扩容时,检测增量因子,如果>0,就扩容增量因子大小,否则扩容自己的一倍。
Set:
HashSet:
1、无序不可重复的。允许null。2、内部使用HashMap结构来存储数据,不序列化。
2、往Set里添加元素时,就是添加到内部的Map中,作为Map的key存在。value是一个常量Object对象。
3、用处:去重。
4、初始容量和HashMap相同,为16,加载因子是0.75。
TreeSet:
1、元素是有序的,按照自然序排列。对象必须实现Comparator比较器接口才能添加成功,否则运行时报错。
2、内部实现方式是TreeMap。
3、初始容量是0.添加元素的时候就是添加了一个Entry对象,进行key的比较,按照排序放入指定位置。
LinkedHashSet:
1、具有链表的特性,还具有Set的特性。
2、内部使用LinkedHashMap来实现。初始容量是16,加载因子是0.75.
3、用处:去重。有序,是添加顺序。
4、Map集合
HashMap:
int a = 1;
int b = 2;
//让它俩换位置
a = a^b;
b = a^b;
a = a^b;
1、加载因子:假如容量是16,加载因子是.75,当添加12个对象,开始扩容。
2、初始容量一定是2的幂次方。
3、通过无参构造创建HashMap时,内部的Node[]数组为null,没有什么容量。
第一次使用时,初始化容量为16.
4、当HashMap到达扩容条件时,容量大小是大于原容量的最小的一个2的幂次方=扩容一倍。
5、线程不安全。
6、hashMap里添加元素时是通过key的hash值,定位到hash槽,如果多个对象定位到同一个槽,内部使用Linked类型链表来存储。
TreeMap:
1、有序的,是自然序,内部使用一个Comparator对象来控制排序方式。
2、初始容量为0,内部使用Entry 对象来保存,内部持有,left Entry的引用和Right Entry的引用 和parent Entry的引用。最终构成了一个类似于二叉树的结构。
3、线程不安全。
Hashtable:
1、与HashMap实现方式相似,使用Entry [] 数组来持有对象,
2、扩容机制与HashMap类似,扩容旧容量大小的一倍。
3、大部分方法都加上了synchronized进行同步,线程安全。
LinkedHashMap 继承了 HashMap:
1、有序的,是元素的添加顺序。
2、内部有一个静态内部类Entry,一个节点对象持有hash值,key,value,next节点的引用。
3、通过无参构造器创建一个空的插入顺序的LinkedHashMap,初始容量是16.
4、添加元素的put方法使用的是HashMap继承过来的方法。