[数据结构] 常用数据结构
数据结构
数组
是一种线性的数据结构,可以按照下标访问与更新,存储按照先后顺序进行,内存中也按照这个顺序存放。
初始化
int[] ids = new int[] {xxx,xxx,xxx}
int ids [] = {xxx,xxx,xxx};
长度指定(必须二选一)
new String [2] //动态初始化
new String[] {"xx","xx"} // 静态初始化
多维数组
int arr [][] = {{xx, xx}, {xx, xx}, {xx, xx}}
// 可以省列数
int arr [][] = new int [3][]
Arrays类可以对数组进行操作
.fill()
填充数组 .sort()
对数组排序 .equals()
比较数组 .binarySearch()
查找数组
链表
常见: 单链表,双向链表,循环链表
没有空间限制,但是数据的查找效率低
-
[1.反转一个单链表。]
思路:
(1)通过辅助栈来完成
(2)定义一个新链表,然后使用头插法,依次遍历插入。
-
[2.返回中间节点,有2个返回第二个中间的节点]
-
[3.输入一个链表,输出该链表中倒数第k个结点。]
-
[4.合并两个有序链表。]
-
[5.以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前]
-
[6.在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。]
-
[7.链表的回文结构]
-
[8.给定一个链表,判断链表中是否有环。]
思路:
(1)哈希表
(2) 快慢指针,如果有环那么两个指针一定会相遇。
-
[9. 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null]
-
[10. 输入两个链表,找出它们的第一个公共结点]
-
LRU缓存
固定存储空间,需要进行删除的时候将最少访问的数据进行删除。
思路:
(1) 通过 HashMap + 双向链表 实现
(2) 通过 继承LinkedHashMap进行实现(只需重写 removeEldest)
Java 实现 : LinkedList类
- LinkedList 实现 List 接口,能进行列表的相关操作。
- LinkedList 实现了 Queue 接口,可作为队列使用。
- LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。
Collection接口提供 : add remove
add
和remove
是一对,源自Collection
;
offer
和poll
是一对,源自Queue
;
push
和pop
是一对,源自Deque
,其本质是栈(Stack
类由于某些历史原因,官方已不建议使用,使用Deque
代替);
offerFirst/offerLast
和pollFirst/pollLast
是一对,源自Deque
,其本质是双端队列。
public boolean add(E e) | 链表末尾添加元素,返回是否成功,成功为 true,失败为 false。 |
---|---|
public void add(int index, E element) | 向指定位置插入元素。 |
public boolean addAll(Collection c) | 将一个集合的所有元素添加到链表后面,返回是否成功,成功为 true,失败为 false。 |
public boolean addAll(int index, Collection c) | 将一个集合的所有元素添加到链表的指定位置后面,返回是否成功,成功为 true,失败为 false。 |
public void addFirst(E e) | 元素添加到头部。 |
public void addLast(E e) | 元素添加到尾部。 |
public boolean offer(E e) | 向链表末尾添加元素,返回是否成功,成功为 true,失败为 false。 |
public boolean offerFirst(E e) | 头部插入元素,返回是否成功,成功为 true,失败为 false。 |
public boolean offerLast(E e) | 尾部插入元素,返回是否成功,成功为 true,失败为 false。 |
public void clear() | 清空链表。 |
public E removeFirst() | 删除并返回第一个元素。 |
public E removeLast() | 删除并返回最后一个元素。 |
public boolean remove(Object o) | 删除某一元素,返回是否成功,成功为 true,失败为 false。 |
public E remove(int index) | 删除指定位置的元素。 |
public E poll() | 删除并返回第一个元素。 |
public E remove() | 删除并返回第一个元素。 |
public boolean contains(Object o) | 判断是否含有某一元素。 |
public E get(int index) | 返回指定位置的元素。 |
public E getFirst() | 返回第一个元素。 |
public E getLast() | 返回最后一个元素。 |
public int indexOf(Object o) | 查找指定元素从前往后第一次出现的索引。 |
public int lastIndexOf(Object o) | 查找指定元素最后一次出现的索引。 |
public E peek() | 返回第一个元素。 |
public E element() | 返回第一个元素。 |
public E peekFirst() | 返回头部元素。 |
public E peekLast() | 返回尾部元素。 |
public E set(int index, E element) | 设置指定位置的元素。 |
public Object clone() | 克隆该列表。 |
public Iterator descendingIterator() | 返回倒序迭代器。 |
public int size() | 返回链表元素个数。 |
public ListIterator listIterator(int index) | 返回从指定位置开始到末尾的迭代器。 |
public Object[] toArray() | 返回一个由链表元素组成的数组。 |
public T[] toArray(T[] a) | 返回一个由链表元素转换类型而成的数组。 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)