![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 76
各种数据结构的讲解和实现
迷亭君
寄蜉蝣于天地,渺沧海之一粟。
展开
-
hashCode() 和 HashSet, compareTo() 和 TreeSet
hashCode() 和 HashSet, compareTo() 和 TreeSetJava 中的 Set 我们经常使用, 但是笔者前几天遇到了一点问题, 如何将自己写的类存入 Set 中??平时在做力扣的过程中 Set 之后的泛型参数使用的都是包装类, 但是自己写的类由于某些东西不够完善, 导致 Set 的功能无法实现, 经过笔者的努力总算是搞明白了一点, 下面我们展开说说.问题发现看下面一段代码:import java.util.HashSet;import java.util原创 2021-04-19 16:18:58 · 330 阅读 · 0 评论 -
自我实现 Java 标准库中HashMap(简易版)
主要想和大家分享哈希表的相关内容哈希表是一种拥有随机访问能力的表.它是通过一个映射函数将元素的内容映射到对应的地址或者位置,从而减少了遍历过程中的消耗.常见的哈希关系有取余的方法,这也是最简单的.通过取余的方式我们可以轻易地得到元素对应的位置,那么问题来了,如果该位置已经有元素占用了怎么办(哈希冲突发生)?常见的做法有两种:1. 闭散列如果发生冲突,就沿着哈希表继续往下找,找到下一个空的位置,按照这个思路,存放元素的时候好说,查找和删除可就麻烦了,而且要是冲突比较多,这些操作就相原创 2021-03-30 17:33:36 · 174 阅读 · 2 评论 -
自我实现 Java 标准库中TreeMap(简易版)
上一篇文章讲解了 Java 中的 Map 和 Set 的简单使用,这次来分享一个简单版本的 TreeMap.首先为什么是简单版本,首先 Java 标准库中的 TreeMap 的底层是根据红黑树来实现的,但是由于本人能力有限,红黑树的代码写不出来,所以在自我实现 TreeMap 的过程中使用的是二叉搜索树.二叉搜索树满足这个特点:每个节点的左孩子的值小于根节点,右孩子的值大于根节点(如果左右孩子都存在的话).根据二叉搜索树的这个特点就可以在查找的时候很方便.我主要实现了常用的几个方法如:g原创 2021-03-30 16:54:16 · 202 阅读 · 4 评论 -
Set 和 Map 的使用
试想一个这样的场景,如果我们将学生的学号和姓名存放在一个二维数组中,如果我们要通过某个学生的学号来查找学生的姓名,通过遍历数组我们可以得到结果,但是的如果数据量很大,那么查找的过程就会非常的费劲,所以 Java 中提供了这样的两个类(其实是接口)Set 和 Map ,Map和set是一种专门用来进行搜索的容器或者数据结构。为什么要有 Set 和 Map 两个模型?实际上我们有时候只需要记录一个数据存不存在(例如我们要查找张三这个学生存不存在),而一些时候我们要通过这个数据找到它所映射的东西(例如我们原创 2021-03-29 11:13:35 · 1399 阅读 · 2 评论 -
大量数据排序 or Top K 问题
面试中经常会遇到这样的问题,现在有一亿个元素,请你排出他们的顺序或者是求出前1000个最大的元素。下面我们给出例子和解决方案。大量数据排序现在有 100G的待排序数据,你的电脑的内存为 1G,外存很大,请你设计一种排序的方法把这 100G 的数据按照升序的要求排好序。解决方案:1.我们可以先将这 100G 的数据分成200份,每一份为 512M ,将这200份数据依次调入内存使用 快排或者归并排序 将这200份数据排成有序的;2.在这200份数据中取每份数据的最小值建立一个小堆(堆的..原创 2021-03-28 17:43:18 · 363 阅读 · 0 评论 -
排序算法
排序算法排序算法是属于《数据结构和算法》中最基本的算法只之一,今天我们使用 Java 语言来实现常用的排序算法,下面的代码全部以升序为例。插入排序思路插入排序的思路是:先将待排序序列分成两个部分,前一部分为已排序序列,剩余部分为未排序序列,然后从未排序的部分中选择第一个元素,在已排序序列中选择合适的位置插入。代码实现 public static void insertSort(int[] arr) { int bound = 1; // [0,原创 2021-03-28 17:05:06 · 152 阅读 · 0 评论