javase(数组、链表、散列表优缺点)

一、数组

1、特点

(1)数组的长度是固定的,也就是说存储的元素的个数是确定的,数组的大小一旦确定就不能更改了。

         例如:定义一个能存储三个元素的数组,当存储第四个元素的时候会出现错误。

(2)数组是引用数据类型

(3)数组中存储的数据的数据类型一定要一致

(4)在内存中占用连续的内存空间,因此,数组不能定义的太大

(5)访问方式:直接访问

(6)存储密度等于1

2、优点

(1)访问快,时间复杂度为O(1)

3、缺点

(1)插入和删除的时候需要移动大量的元素,效率较低

(2)数组的长度固定

(3)内存必须连续

(4)所有元素数据类型必须相同

二、链表

1、特点

(1)链表类型众多,有单向链表、双向链表、循环链表,每一个结点由两部分组成,

(2)存储上:不一定占用连续的空间,且不需要事先分配空间,元素个数不确定

(3)访问方式:顺序访问

(4)存储密度小于1(分为数据域和指针域)

2、优点

(1)增删快,时间复杂度为O(1)

3、缺点

(1)只支持顺序访问,时间复杂度为O(n)

(2)存储密度小,存储密度小于1,而顺序表的存储密度等于1

三、散列表(哈希表)

1、冲突

将六个元素放到容量为七的数组中的时候,虽然数组的容量大于元素的个数,但是,经过哈希函数计算后可能有多个元素映射到同一个位置,这就是冲突,冲突不能避免,但是可以减少冲突的发生。

常用的哈希函数有:除留余数法、二次探测法、链地址法等

2、链地址法

基本思想:相同哈希地址(根据哈希函数得出)的记录链成一单链表,m个哈希地址就设m个单链表,然后用用一个数组将m个单链表的表头指针存储起来,形成一个动态的结构

链表长度达到8并且元素的个数超过64时,将变为红黑树。

3、特点

(1)由哈希值不能得出原始数据

(2)相同的数据哈希值相同

(3)哈希算法的冲突要尽可能小

4、优点

提高了插入(虽然是基于数组的,但是插入的时候直接根据函数确定插入的位置,不需要移动其他元素)和查询的效率

5、缺点

(1)基于数组的,数组创建后难于扩展某些哈希表被基本填满时,性能下降得非常严重,是先要确定存储的数据量

(2)也没有一种简便的方法可以以任何一种顺序〔例如从小到大〕遍历表中数据。

总结:

顺序表:https://www.cnblogs.com/zhai1997/p/13363954.html

链表:https://www.cnblogs.com/zhai1997/p/13370521.html

原文地址:https://www.cnblogs.com/zhai1997/p/12430996.html