- 博客(5)
- 收藏
- 关注
原创 Hash表散列
罗宾汉哈希:罗宾汉哈希是一种基于开放寻址的冲突解决算法,通过冲突元素与理想位置的偏移值来决定,对偏移值小的进行劫富济贫,把它的位置让给偏移值大的。合并散列:合并散列是开放寻址和单独链接的混合,冲突元素在哈希表中进行连接,不需要再去循环遍历寻找碰撞元素也就是a和b发送碰撞的时候,a可以快速的查找到b。拉链寻址在冲突的索引位置上形成链表,将冲突的元素存在其中来解决冲突,缺点是链表可能会边长,增加查找的时间复杂度。HashMap用链表来储存冲突的元素,当发生哈希冲突时,新元素添加到链表的尾端。
2024-05-14 16:46:13
179
原创 Stack
ArrayDeque 是一个基于数组实现的堆栈数据结构,在数据存放时元素通过二进制与运算获取对应的索引存放元素。当数组长度超过初始空间后,进行2的n次幂左移一位扩容,并将数组内容的元素按照分半分别进行迁移。3.出栈时弹出为先弹出head位置的节点然后遍历弹出(head+1)&(elementdata.length-1)位置的节点。ArrayDeque是双端队列,使用时可以从两端插入或弹出可以同时显示栈和队列的功能。1.第一次扩容时,由于tail=0,所以不会进行前半段的互换。Q1.堆栈的使用场景?
2024-05-13 20:43:12
167
原创 Queue
优先队列通过二叉堆实现,PriorityQueue使用数组来实现二叉堆结构。延迟队列通过DelayQueue类来实现,这个类内部使用了优先队列来实现,只有当延迟期满的时候元素才可以从队列中取出。二叉堆插入元素是新元素被插入到二叉堆的末尾,然后进行上浮操作,如果不符合堆的性质(如在最小堆中新元素小于父节点)则进行上浮操作。定时任务调度,缓存数据过期处理,应用程序定时提醒功能,网络应用中的重试机制,如消息的延迟重发。弹出元素与插入过程相反,根节点元素弹出,堆末元素到根节点的位置,进行下沉操作。
2024-05-13 09:22:45
100
原创 Array
关键方法是grow(),判断是否需要扩容,需要扩容则使用Arrays.copyOf 创建一个新的数组,将原有数据拷贝过去,这个过程中实际上调用了System.arraycopy方法实现简单的复制,之后将elementData数组指向新的内存空间时newCapacity的连续空间。5.AreayList是如何完成扩容的,System.arraycopy各个入参的作用是什么?删除为O(n),最差的情况是删除第一个元素,后(n-1)个元素都需要向前挪动一个位置。2.数组的元素删除和获取,时间复杂度是多少?
2024-05-12 19:30:59
124
原创 Linked List
链表是数据元素的线性集合,其线性顺序不由内存中的物理地址决定。它由众多节点组成,每个元素指向下一个元素,这些节点一起组成线性序列 Java 中的LinkedList 使用的是双向循环列表 链表中数据插入和删除时间复杂度均为O(1),获取元素需要遍历因此为O(n) 因为链表插入删除都很快,所以适合频繁插入删除的操作,如果是查询的话使用数组
2024-05-12 12:29:24
107
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人