文章目录
1、常见的数据结构
1. 栈 先进后出
2. 队列 先进先出
3. 数组
查询快:数组的地址是连续的,我们可以直接通过数据的首地址来找到数组,通过索引查询数据元素
增删慢:数组的长度是固定的,想要增加或者删除某个元素,最好的是创建一个新的数组来转移内容。
在堆内存中频繁的创建数组,转移数组元素,销毁数组,效率低下
4. 链表
查询慢:地址不是连续的,每次查询元素必须从头开始
增删块:链表中的每一个元素也称为一个数据源
一个节点包含了一个数据源
增加/删除 对链表的整体结构没有影响,只需要改变指向地址便可
5. 红黑树:也就是一颗二叉树,他能有效的的提高查询效率
红黑树:
2、List
List常用的实现类
2.1、LinkList
里面含有大量操作首尾数组的方法
2.2、ArrayList
遍历快,增删慢
大小可变的数组实现
3、Set
与List不同的是它不允许重复
同时他没有索引
3.1、HashSet
1、它继承Set接口
2、是一个无序的集合,存储元素和取出元素的顺序可能不一致
3、底层实现是一个哈希表(查询速度非常快)
存储特点:通过哈希值存储
3.2、HashSet存储自定义对象
如果我们定义一个学生,要求学号相同和姓名相同的就是同一个人
这时候如果直接存储在HashSet中,他们默认是不同的
这时候需要重新写入hashCode()和equals()方法,来保证不重复
3.3、LinkHashSet
LinkHashSet 是一继承了HashSet的类
它的特点:
- 它是一个双链表结构
- 它的结构是:(数据+链表/红黑树)+ 链表
- 它多出来呢的一个链表用来记录元素的存储顺序,保证有序这个是他与HashSet最大的不同
4、哈希表
object有个方法 hashCode()
就是可以获得对象的哈希值
下面就是哈希表的一点理解