数据结构
文章平均质量分 70
满眼*星辰
一名努力学习编程的大三学生
展开
-
总结Java中反射+枚举+Lambda表达式
反射定义Java的反射(reflection)机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性,既然能拿到那么,我们就可以修改部分类型信息;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射(reflection)机制。基本信息Java程序中许多对象在运行时会出现两种类型:运行时类型(RTTI)和编译时类型,例如Person p = new Student();这句代码中p在编译时类型为Person,运行时类型为Stu原创 2021-05-11 14:37:14 · 1009 阅读 · 0 评论 -
深度分析及实现哈希表
哈希概念哈希冲突避免哈希冲突哈希函数设计负载因子调节解决哈希冲突闭散列线性探测二次探测开散列实现自定义HashMap概念顺序结构以及搜索树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经过关键码的多次比较。顺序查找时间复杂度为O(N),搜索树中为树的高度,即O(logn),搜索的效率取决于搜索过程中元素的比较次数。理想的搜索方法:可以不经过任何比较,一次直接从表中得到要搜索的元素。 如果构造一种存储结构,通过某种函数(hashFunc)使元素的存储位置与它的关键码之间能够原创 2021-05-09 17:49:32 · 172 阅读 · 1 评论 -
Java深入理解及巩固 Map & Set 集合
Map和Set接口关系Map概念Map是一个接口类,该类没有继承自Collection,该类中存储的是<K,V>结构的键值对,并且K一定是唯一的,不能重复。常用方法方法解释V get(Object key)返回 key 对应的 valueV getOrDefault(Object key, V defaultValue)返回 key 对应的 value,key 不存在,返回默认值V put(K key, V value)设置 key 对应的 va原创 2021-05-06 21:46:01 · 274 阅读 · 3 评论 -
总结java的泛型和内部类
泛型与内部类泛型内部类实例内部类静态内部类匿名内部类本地内部类泛型泛型是java1.5中增加的一个新特性,通过泛型可以写与类型无关的代码,即编写的代码可以被很多不同类型的对象所重用,经常用在一些通用的代码实现中,比如:java集合框架中的类几乎都是用泛型实现的。泛型的本质是:类型参数化。类似函数传参一样,传递不同的实参,函数运行完将会产生不同的结果。泛型12点总结class MyStack< T> 此时< T>代表是一个占位符,表示当前类是一个泛型类this.elem原创 2021-05-05 19:00:33 · 381 阅读 · 1 评论 -
超详细总结基于比较的七大经典 排序 -- 不会的童鞋快进来补习
排序排序概念排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。平时的上下文中,如果提到排序,通常指的是排升序(非降序)。通常意义上的排序,都是指的原地排序(in place sort)。稳定性如果当前这个排序,在排序过程中,没有发生跳跃式的交换,那么我们就认为这个排序是稳定的注意:一个排序如果是稳定的排序,那么它也可以被时限为一个不稳定的排序但是如果一个排序本身就是不稳定的排序,那么不可能实现为一个稳定的排序总览图直接插入排序实现原理整个区原创 2021-05-04 12:30:03 · 1427 阅读 · 16 评论 -
java中基于comparable接口和比较器comparator的对象比较
对象比较引出问题方法一:给Card类实现comparable接口方法二:用匿名函数实现comparator接口方法三:编写通用比较器类实现comparator接口注意事项对象的比较重写compareTo方法重写compare方法重写equals方法三种方式对比引出问题优先级队列在插入元素时有个要求:插入的元素不能是null或者元素之间必须要能够进行比较我们现在有这个代码,需要用优先级队列加入相同的卡片class Card{ public int rank; // 数值 public原创 2021-05-02 09:45:38 · 290 阅读 · 0 评论 -
手撕二叉搜索树代码
搜索树概念二叉搜索树又称二叉排序树,它或者是一棵空树**,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树...原创 2021-04-23 15:17:48 · 119 阅读 · 0 评论 -
仅需一篇文章让你深入理解 优先级队列(堆)
优先级队列(堆)1. 二叉树的顺序存储、1.1 存储方式使用数组保存二叉树结构,方式即将二叉树用层序遍历方式放入数组中。一般只适合表示完全二叉树,因为非完全二叉树会有空间的浪费。这种方式的主要用法就是堆的表示1.2 下标关系已知双亲(parent)的下标,则:左孩子(left)下标 = 2 * parent + 1;右孩子(right)下标 = 2 * parent + 2;已知孩子(不区分左右)(child)下标,则:双亲(parent)下标 = (child - 1) /原创 2021-04-22 12:27:24 · 137 阅读 · 0 评论 -
二叉树7道进阶练习题(含题目链接)
二叉树进阶1.二叉树的构建及遍历2.二叉树的层序遍历3.二叉树的最近公共祖先4.二叉树搜索树转换成排序双向链表5.从前序与中序遍历序列构造二叉树6.从中序与后序遍历序列构造二叉树7.根据二叉树创建字符串1.二叉树的构建及遍历牛客链接import java.util.*;class TreeNode { public char val; public TreeNode left; public TreeNode right; public TreeNode(原创 2021-03-31 10:44:18 · 252 阅读 · 0 评论 -
二叉树8道基础面试题(含力扣链接)
二叉树基础面试题1.二叉树的前序遍历2.二叉树的中序遍历3.二叉树的后序遍历4.相同的树5.另一个树的子树6.二叉树的最大深度7.平衡二叉树8.对称二叉树1.二叉树的前序遍历力扣链接/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * Tree原创 2021-03-27 21:05:37 · 287 阅读 · 0 评论 -
详解数据结构之--二叉树
树结构1.1 定义树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:有一个特殊的节点,称为根节点,根节点没有前驱节点除根节点外,其余节点被分成M(M > 0)个互不相交的集合T1、T2、…、Tm,其中每一个集合 Ti (1 <= i <= m)又是一棵与树类似的子树。每棵子树的根节点有且只有一个前驱,可以有0个或多个后继树是递归定义的。1.2 概原创 2021-03-24 18:05:49 · 158 阅读 · 0 评论 -
手撕二叉树中各个方法
二叉树/** * Created with IntelliJ IDEA. * Description:二叉树 * User: starry * Date: 2021 -03 -15 * Time: 19:28 */class BTNode { public char val; public BTNode left; //左子树的引用 public BTNode right;//右子树的引用 public BTNode(char val) {原创 2021-03-15 21:38:21 · 210 阅读 · 0 评论 -
深入浅出数据结构——队列
队列概念队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(FirstIn First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列:进行删除操作的一端称为队头(Head/Front)接口关系...原创 2021-03-13 17:00:23 · 84 阅读 · 0 评论 -
深入浅出数据结构——栈
栈栈(Stack)概念栈的方法逆波兰式数组实现栈栈(Stack)概念栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出 LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据在栈顶。栈的方法方法说明E push(E item)将元素放在栈顶E pop()将栈顶元素弹出E pe原创 2021-03-09 21:27:43 · 359 阅读 · 0 评论 -
List集合
List集合List(线性表)常见方法ArrayList(顺序表)LinkedList(链表)迭代器总结四种打印集合方式Collections.sort排序练习题List(线性表)常见方法方法解释boolean add(E e)尾插 evoid add(int index, E element)将 e 插入到 index 位置boolean addAll(Collection<? extends E> c)尾插 c 中的元素E remove(in原创 2021-03-09 19:25:20 · 327 阅读 · 0 评论 -
集合框架+预备知识
集合框架Java 集合框架 Java Collection Framework ,又被称为容器 container ,是定义在 java.util 包下的一组接口 interfaces 和其实现类 classes 。Collection :用来存储管理一组对象 objects ,这些对象一般被成为元素 elementsSet : 元素不能重复,背后隐含着查找/搜索的语义SortedSet : 一组有序的不能重复的元素List : 线性结构Queue : 队列Deque : 双端队列原创 2021-03-09 16:38:31 · 103 阅读 · 0 评论 -
手撕双向链表DoubleLinkedList
双向链表结构双向链表实现/** * Created with IntelliJ IDEA. * Description: * User: starry * Date: 2021 -02 -19 * Time: 13:51 */class ListNode { public int val; public ListNode next; public ListNode prev; public ListNode(int val) { thi原创 2021-02-19 17:00:10 · 231 阅读 · 0 评论 -
单链表的13道面试题详解(含力扣牛客链接)
单链表题1、移除链表元素2、反转链表3、链表的中间结点4、链表中倒数第k个结点5、合并两个有序链表7、删除链表中重复的结点8、链表的回文结构9、相交链表10、环形链表11、环形链表 II12、删除中间节点13、旋转链表1、移除链表元素点我跳转题目链接class Solution { public ListNode removeElements(ListNode head, int val) { if (head == null) return null; Lis原创 2021-02-18 14:37:35 · 358 阅读 · 2 评论 -
手动实现单链表各个功能LinkedList
/** * Created with IntelliJ IDEA. * Description:单链表 * User: starry * Date: 2021 -02 -10 * Time: 16:56 */class Node { public int val; public Node next; public Node() { } public Node(int val) { this.val = val; }}原创 2021-02-15 12:55:16 · 267 阅读 · 0 评论 -
手撕底层ArrayList(顺序表)
顺序表顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。顺序表一般可以分为:静态顺序表:使用定长数组存储。动态顺序表:使用动态开辟的数组存储。静态顺序表适用于确定知道需要存多少数据的场景.静态顺序表的定长数组导致N定大了,空间开多了浪费,开少了不够用.相比之下动态顺序表更灵活, 根据需要动态的分配空间大小import java.util.Arrays;/** * Created with IntelliJ IDEA.原创 2021-02-10 12:19:10 · 185 阅读 · 0 评论