数据结构

数据结构:

 

一、

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继承过来的方法。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值