![](https://img-blog.csdnimg.cn/ef32daa580e146c086d75729a7ac5c11.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java数据结构
文章平均质量分 88
关于Java集合类和数据结构详解
良月初十♧
嗯哼嗯哼蹦擦擦,哦耶哦喽哦买噶
展开
-
Java集合框架:优先级队列、PriorityQueue详解
堆的本质就是一颗完全二叉树,如上图所示;用顺序存储的方式来进行存储(如果是非完全二叉树,不宜采用顺序方式来存储数据,此时会有数组空间的浪费)。大根堆如果一组数据集合中的所有的元素按照完全二叉树的顺序存储方式来进行存储,并且根节点都大于左右孩子节点,此时这个就称作大根堆。小根堆和大根堆类似,本质也是用顺序存储的方式存储的一颗二叉树,并且根节点小于左右孩子节点,此时称作这个堆为小根堆。而优先级队列的本质就是一个大根堆或者小根堆。原创 2023-06-27 13:15:07 · 4523 阅读 · 5 评论 -
数据结构:二叉树详解
(重点)前言二叉树的一些oj题是在面试中常考的,同时概念也是很重要的,在做二叉树习题中掌握概念以及一些推导公式才能提高做题效率。原创 2023-06-22 15:28:47 · 899 阅读 · 0 评论 -
HashMap, HashTable, ConcurrentHashMap 之间的区别
此时就不只是有一把锁了,把每个链表的头节点当成锁锁对象,操作不同的链表就是操作不同的锁对象,(注:两个线程针对同一个锁对象加锁才会产生锁竞争,针对不同的锁对象加锁是没有锁竞争的),这里的加锁概率就大大降低了,不产生锁竞争我就不加锁,甚至我加了锁也只是一个偏向锁,有了锁竞争,我再升级~(ConcurrenthashMap是非常来灵活的加锁,所以推荐使用此种方案解决线程安全问题)如果两个线程插入两个元素,两个元素在不同的链表上,(两个线程修改不同的变量)此时本身就是线程安全的,那还加锁干啥呢~~原创 2023-05-03 11:58:34 · 75 阅读 · 0 评论 -
Java集合框架:队列、Queue和Deque详解
前言队列是一种数据结构,在Java集合框架中,有对应的实现的接口,原创 2023-06-18 17:14:46 · 7084 阅读 · 0 评论 -
Java集合框架:栈、Stack详解
前言栈是一种数据结构,一种特殊的线性表,。数据插入和删除的操作的一端称作栈顶,另一端称作栈底。。原创 2023-06-16 12:28:15 · 1448 阅读 · 0 评论 -
Java集合框架:链表和LinkedList详解
如上图所示链表的结构:是一种物理存储结构上不连续的存储结构,数据元素的逻辑顺序是通过链表节点中的引用连接下一个数据元素的。原创 2023-06-13 20:01:34 · 696 阅读 · 1 评论 -
Java集合框架:ArrayList详解
1. ArrayList是以泛型的方式实现的,使用时必须先实例化2. ArrayList实现了randomAccess接口,所以ArrayList支持随机访问3. ArrayList实现了Cloneable接口,ArrayList时可以克隆的4. ArrayList不是线程安全的,(Vector是线程安全的)5. ArrayList是一段连续的空间,可以动态扩容,是动态的顺序表。原创 2023-06-11 21:01:58 · 5995 阅读 · 3 评论 -
Map及Set的总结
可以看到Map中有很多的方法:简单介绍一下几种常用的,首先是put方法,就是往map中存放数据的,以key-value键值对的方式存储,new对象的时候可以用泛型指定key和val的类型。如上图:Entry这个接口中有这么多的方法,但是没有提供设置key的方法,因为它的底层是一颗搜索树,如果设置的key值,就要对这颗搜索树进行重新排序了,就乱了。2. Map中存放的key值是唯一的,就像是TreeMap中,二叉搜索树左边是比根小的,右边是比根大的,根本就没有相同的节点的说法。原创 2023-04-11 17:47:39 · 132 阅读 · 0 评论 -
总结堆知识点
队列是一种先进先出(FIFO)的数据结构,但有些情况下,操作的数据可能带有优先级,一般出队 列时,可能需要优先级高的元素先出队列优先级队列的模拟实现:堆,他就是在二叉树的基础上,堆数据的操作进行了一些调整(让执行的数据有了优先级)。:底层是一个数组(物理结构),它是一个顺序存储的二叉树(逻辑结构),并且必须是一颗完全二叉树。(从上到下,从左到右,节点是依次排列的,不能有空着的节点。每棵树的根节点最大,大于两个孩子节点。每棵树的根节点最小,小于两个孩子节点。原创 2023-04-04 15:30:17 · 87 阅读 · 0 评论 -
HashSet和HashMap以及HashMap中put方法中源码的总结
当我们new一个HashMap时,其实并没有给我们分配一块内存,没有开辟空间。那放入第一个数据元素的时候怎么能放进去呢?原创 2023-04-13 17:01:58 · 160 阅读 · 0 评论 -
newCoder数据结构链表和二分查找题解总结(除去难题)
思路:双指针,先进行分割,用两段新的链表,奇数节点排在一起是一段,偶数节点排在一起是一段,new两个新的头节点,head1指向left(奇数)节点,head2指向right(偶数)节点,然后定义两个当前节点,一个指向left,一个指向right,(生成新的段的时候是让这两个cur节点去往后走),首先left走两步(原链表的第一个节点就是奇数节点,第二个节点就是偶数节点),所以让left指针走两步,让right节点也走两步,依次类推,left走过的就是奇数节点,right走过的就是偶数节点。原创 2023-04-18 21:07:05 · 451 阅读 · 0 评论 -
Java数据结构排序总结
如果不用递归,我们就需要模拟递归的这个过程,需要用合适的数据结构,在递归的过程中,主要是需要重新找新的left和right下标,所以先去照一次基准,此时就有了递归时的L下标和R下标,可以用栈来存放每次递归时需要的L和R下标,出栈时,出一个数据给到R下标,出栈一个值给到L下标,进行两边找基准,当栈不为空的时候,就出栈两个下标,根据这两个下标来继续找新的基准,此时出栈元素之后要根据这两个下标判断左右是否只有一个元素,当只有一个数据的时候,就不能入栈了。当栈弹空了,也就排序完成了。这也减少了递归的次数。原创 2023-04-10 21:57:51 · 418 阅读 · 0 评论 -
数据结构算法面试题总结一些思路
链表:删除给定值的val的所有节点:反转一个单链表:不用遍历一遍链表,直接是头插法(定义cur节点,在head节点之后,定义curnext节点,在cur节点之后,cur插在head节点之前........)返会中间节点:快慢指针(快的指针是慢的指针走的速度的二倍)返回倒数第k个节点:也是快慢指针,快指针和慢指针相差的步数+1 就是k(有六节点,返回倒数第三个节点,快指针先走k-1个节点就是走两步,然后快指针和慢指针再一起走,快指针走到最后的时候,此时满指针的位置就是倒数第k个节点)。原创 2023-04-04 10:26:10 · 49 阅读 · 0 评论 -
数据库索引背后的数据结构
1.当前的一个节点保存了很多个key值,最终的树的高度是比较矮的,查询的时候减少了IO(读写硬盘的次数)访问次数,因为内存空间是有限的,如果数据库中每一行的数据都要保存在内存中不显示,所以每一行的数据是保存在硬盘上的。B树的优点:相比较二叉搜索树,B树每个节点都存放了很多个key值,并且多了很多个叉(节点的子树多了),也就是说在同样多的key的个数下,B树的高度就比二叉搜索树的高度低了很多,树的高度很高就意味着搜索的效率很低,树的高度越高,在进行查询比较的时候访问磁盘的次数就越多。原创 2023-04-28 09:53:19 · 71 阅读 · 0 评论