![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 77
数据结构相关知识与代码详解--Java
薯条和番茄酱
天天开心
展开
-
Java中Hashtable、HashMap、ConcurrentHashMap之间的区别
Hashtable是java早期发布时提供的一种键值映射的数据结构,而HashMap产生于JDK1.2。对于在单线程中使用,由于Hashtable为保证线程安全在许多关键方法中都加锁以至于效率相比于HashMap低。对于在多线程中我们又有ConcurrentHashMap在jdk1.8之前通过加分段锁,在jdk1.8通过直接给每个哈希桶(链表分配一个锁)实现线程安全效率相比于Hashtable高。所以目前Hashtable基本上已经被弃用了。原创 2023-04-08 11:51:05 · 414 阅读 · 0 评论 -
归并排序的递归与非递归实现
3.我们通过申请一个临时数组tmp,将小的有序序列依次添加其中,全部添加完毕后,拷贝一下,就得到一个有序序列了,合并时我们是对每一层n个段进行合并,由于树的深度为logN所以总的时间复杂度是O(N*logN)。1.gap代表一个段的长度,left,right代表段的头尾,mid可以用来确定归并时下一个段的位置,mid就等于一个段的头加上段长-1,就是下一个的段头的前一个。2.通过对序列进行不断二分,当我们将序列分解到不能再分的时候(也就是一个),再通过比较分解成的最小有序序列头的大小,确定合并顺序。原创 2023-02-09 17:35:33 · 112 阅读 · 0 评论 -
HashMap和HashSet的那些关系
上一节讲了TreeSet、TreeMap的关系,具体可以看博客TreeSet与TreeMap那些关系,这一节讲解的HashMap,HashSet其底层都是用哈希表实现的Map,Set。接下来将介绍,他们之间的一些区别。解释说明哈希表也称散列表,是为了提高搜索效率,不经过任何比较,一次直接从表中得到要搜索的元素(理想情况哈希表是通过某种函数(hashFunc)使元素的存储位置与它的关键码之间能够建立一一映射的关系。结构如图:以一下哈希函数的存储方式。这种情况下,会出现哈希冲突。原创 2023-02-08 14:31:03 · 312 阅读 · 0 评论 -
TreeSet与TreeMap的那些关系
接下来要介绍的TreeSet、TreeMap,分别实现了Set、Map接口,在数据结构中Map和Set是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。一般把搜索的数据称为关键字(Key),和关键字对应的称为值(Value),将其称之为Key-value的键值对,所以纯 key 模型,比如:有一个英文词典,快速查找一个单词是否在词典中。Key-Value 模型,比如:统计文件中每个单词出现的次数,统计结果是每个单词都有与其对应的次数:原创 2023-02-07 15:10:54 · 165 阅读 · 0 评论 -
Java实现堆的创建及相关操作
1.观察可知,堆删除最后一个节点时只需要usedSize–即可,(也是定义usedSize的好处),所以我们可以将第一个结点的值与最后一个节点的值交换,然后再将第一个节点向下调整,即可。1.将插入的数存入到数组最后,也就是最后一个节点,由于堆的性质,我们需要调整堆的结构,直插入了一个节点,只需向上调整,将最后一个节点的值不断向上比较,就能确定下堆。由于堆实际上是完全二叉树的变形,且二叉树某个节点的值总是不大于或者不小于其父节点的值(分别称为最大堆、最小堆)。2.时间复杂度:即树的高度O(logN)原创 2023-02-05 12:36:20 · 454 阅读 · 0 评论 -
快排的三种方法(附源码)
取出第一个元素,空出一个位置拿出来定义两个指针,l,r分别指向头和尾,r向左移动如果遇到小于第一个元素的,放入空位,l向右移动,找比第一个元素大的放入刚刚空出来的位置,再次重复,l、r相遇时,将第一个元素放入空的位置,再以其下标为界限,左右用相同的方法继续。如果遇到大的继续行走,prev不走。定义l,r从头尾开始,l找比第一个元素大的,r找比第一个元素小的,找到后交换两个元素,直到相遇时,将相遇的元素与第一个元素交换,如何以此基准(相遇时下标),再次左右进行。原创 2023-02-03 17:06:06 · 714 阅读 · 0 评论 -
完全二叉树与堆的转换
1.实际上是一种完全二叉树,且某个节点的值总是不大于或者不小于其父节点的值(分别称为最大堆、最小堆)。2.jdk1.8中优先级队列 PriorityQueue,底层即采用堆的数据结构存储,具有返回优先级最高的对象,添加新的对象的最基本操作。3.堆底层使用数组实现(顺序存储),使用堆总是完全二叉树,这样不会出现数组中间出现 null 的情况。原创 2023-01-28 11:48:29 · 911 阅读 · 0 评论 -
数据结构——二叉树
或者为空或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。注意二叉树不存在度大于2的结点(一个结点含有子树的个数称为该结点的度)二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树。原创 2023-01-16 14:08:14 · 268 阅读 · 1 评论 -
数据结构——栈和队列
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据在栈顶。队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)。入队列:进行插入操作的一端称为队尾(Tail/Rear)。出队列。原创 2023-01-05 20:46:00 · 413 阅读 · 0 评论 -
java——LinkedList
1.LinkedList的底层是双向链表结构,由于链表没有将元素存储在连续的空间中,元素存储在单独的节点中,然后通过引用将节点连接起来了,因此在在任意位置插入或者删除元素时,不需要搬移元素,效率比较高。2.结构如图所示:3.在集合框架中,LinkedList也实现了List接口,具体如下:【说明】LinkedList实现了List接口LinkedList的底层使用了双向链表LinkedList没有实现RandomAccess接口,因此LinkedList不支持随机访问。原创 2023-01-04 11:30:35 · 734 阅读 · 1 评论 -
数据结构——链表(java)
链表是一种物理存储结构上非连续存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的。原创 2023-01-03 11:27:55 · 4339 阅读 · 0 评论 -
数据结构——顺序表
1.线性表是具有n个相同特性的数据元素的有限序列,线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列…2.线性表在逻辑上是线性结构,但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组(顺序存储)和链表(链式结构)的形式存储。1.顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。2.缺点:插入删除元素时需要挪动元素,复杂度O(n)。原创 2023-01-01 21:29:29 · 120 阅读 · 0 评论 -
时间复杂度与空间复杂度
一个操作软工和样本的数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作。原创 2022-12-29 19:22:17 · 248 阅读 · 0 评论