JAVA数据结构

一、ArrayList

1.1、数据结构

1、一个可以动态修改的数组

2、占用一块连续的内存空间
在这里插入图片描述

1.2、优点

查询效率是O(1)

1.3、缺点

1、删除和插入数据,需要大量移动后面的数据

2、在添加元素时如果数组长度不够则需要扩容和数据复制

二、LinkedList

2.1、数据结构

linkedList底层采用数据结构为双向列表结构

2.2、优点

链表的存储为物理独立存储,所以LinkedList插入O(1)并且无需扩容也无需位置挪移;

2.3、缺点

查询慢O(N)。

三、哈希表

3.1、数据结构

1、哈希表=数组+单向链表

2、哈希表是一个数值和单向链表的结合体,融合了两种数据结构的优点

3.2、优点

融合了两种数据结构的优点

数组:查询快

链表:增删改快

3.3、缺点

四、HashMap

4.1、数据结构

哈希表

hashMap底层数据结构Jdk1.7之前采用数组+链表,1.8之后采用数组+链表+红黑树

JAVA数据结构_第1张图片

4.2、优点

查询效率高

4.3、缺点

非线程安全

4.4、为什么引入红黑树

其实主要就是为了解决jdk1.8以前hash冲突所导致的链化严重的问题,因为链表结构的查询效率是非常低的,他不像数组,能通过索引快速找到想要的值,链表只能挨个遍历,当hash冲突非常严重的时候,链表过长的情况下,就会严重影响查询性能,本身散列列表最理想的查询效率为O(1),当时链化后链化特别严重,他就会导致查询退化为O(n)为了解决这个问题所以jdk8中的HashMap添加了红黑树来解决这个问题,当链表长度>=8的时候链表就会变成红黑树,红黑树其实就是一颗特殊的二叉排序树嘛,这个时间复杂…反正就是要比列表强很多

五、HashTable

5.1、数据结构

哈希表

5.2、优点

线程安全:所有的防范都是synchronized

5.3、缺点

synchronized锁,效率低;

六、HashSet

6.1、数据结构

底层是hashmap

6.2、优点

1、无重复key

2、简化版的hashmap,只存储了key

6.3、缺点

七、LinkedHashMap

JAVA数据结构_第2张图片

7.1、数据结构

1、LinkedHashMap的结构是数组+链表(+红黑树)+双向链表。双向链表是用来维护元素的顺序的。HashMap的元素是无序的,LinkedHashMap的元素是有序的。LinkedHashMap的存取数据的方式还是跟HashMap一致。

7.2、优点

1、和HashMap的不同之处有:遍历方式不一样(扩容是用到遍历),HashMap根据按数组顺序来遍历,如果遇到链表,则依次遍历链表中的元素,完了之后继续遍历数组的元素。

2、LinkedHashMap是按双向列表来遍历的,所以LinkedHashMap遍历的性能比HashMap高一点,因为HashMap中有空元素。

3、LinkedHashMap中双向链表的顺序是按元素添加的顺序的,新添加的元素被加到双向链表的末尾。LinkedHashMap还有一个accessOrder属性,可以在new LinkedHashMap的时候传进去,accessOrder默认为false,表示访问元素不改变双向链表中元素的顺序,如果accessOrder为true,则访问元素的时候,即get一个元素的时候,会把该元素移动(先删除后添加,修改before和after指向)到双向链表的末尾。

7.3、缺点

LinkedHashMap和HashMap都是线程不安全的。

7.4、使用场景

FIFO缓存算法:如果链表有长度限制的话,最新添加的元素在链表头,最旧的元素在链表尾,最旧的元素被首先删除。

LRU缓存算法:最近最少使用(被删)。如果链表有长度限制的话,最新添加的元素在链表的头部,如果一个元素被访问了,那么这个元素会被移动到链表头部,链表尾部的元素(最近最少被添加或访问)首先被删除。

八、LinkedHashMap

你可能感兴趣的:(数据结构,算法)