Java
文章平均质量分 88
Lockey-s
这个作者很懒,什么都没留下…
展开
-
掌握及手把手实现哈希表
哈希表概念哈希函数、冲突插入、查找元素哈希函数和导致冲突的原因避免冲突解决冲突闭散列开散列二级目录三级目录概念在一组数据当中,想要找到关键字,最差得 O(N) 的时间复杂度。如果要在二叉搜索树当中找的话,最好也是:log 以2为底 N。最差是 n 。而 哈希表 就可以不经过任何比较就拿到数据。存的时候按照某个方法去存,拿的时候也是按照某个方法去拿。哈希表也叫散列表。时间复杂度是 O(1)。哈希函数、冲突插入、查找元素根据待插入元素的关键码,以此函数计算出该元素的存储位置并按此位置进行存放。查找的时原创 2022-03-16 20:14:31 · 2339 阅读 · 11 评论 -
轻松掌握内部类
内部类本地内部类实例内部类静态内部类匿名内部类本地内部类定义在方法当中的类,只能在当前方法当中使用。实例内部类在实力内部类当中,不能定义静态的成员变量,如果非要定义,只能定义一个静态的常量。因为内部类是写在哟个类里面,所以那个类就成了外部类。因为定义在类里面,所以可以看作外部类的实例成员。使用内部类也是需要对象的,也可以继承类,实现接口。把内部类当作一个正常的类去看待就好了。代码如下:interface A {}//这是一个普通的类:因为有了内部类,所以这个类就可以当作外部类class O原创 2022-03-14 21:59:49 · 316 阅读 · 16 评论 -
轻松掌握 Map 和 Set
Map 和 Set概念MapputgetgetOrDefaultremoveSetentrySetset 自动去重Iterator 接口概念map 和 set 是一种专门用来搜索和查询的容器或数据结构,效率很高。是为了解决在 “增删查改” 情况下使用的数据结构。map set 模型:一般把搜索的数据称为关键字 (key) ,和关键字对于的称为值(value) 称为 key-value 的键值对。纯 key 模型:set。key - value 模型:mapMapHashMap 在存储元素的时候原创 2022-03-06 21:02:52 · 853 阅读 · 22 评论 -
轻松掌握泛型
泛型概念实例通过 Object 放入多种数据类型泛型写法泛型的上界写泛型类,求出数组当中的最大值静态泛型方法泛型当中的父子类关系通配符通配符的上界通配符的下界概念在《Java编程思想》当中是这样说的:一般的类和方法,只能使用具体的类型: 要么是基本类型,要么是自定义的类。如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大。也就是说,泛型是适用于多种类型的。把泛型作为了参数进行传递。实例泛型是将数据类型参数化,进行传递。可以将数据类型参数化,编译时自动进行类型检查和转换。通过 O原创 2022-03-02 21:15:42 · 610 阅读 · 20 评论 -
常见的排序-Java详解
排序排序的稳定性直接插入排序复杂度及稳定性希尔排序复杂的及稳定性选择排序复杂度及稳定性交换方法堆排序复杂度及稳定性冒泡排序复杂度及稳定性快速排序复杂度及稳定性归并排序递归方法非递归方法二级目录三级目录排序的稳定性如下图所示:通过上面这种方法就能判断排序是否稳定。一个稳定的排序,可以实现为不稳定的排序,但是一个本身不稳定的排序,是不能变成稳定的排序。直接插入排序类似于冒泡排序。假设有如下数据:12 5 9 4 10,拿第一个数据,然后用后面的数据和它相比较,放在前面。如下图所示:默认第一个数据原创 2022-03-01 16:55:03 · 702 阅读 · 16 评论 -
基于堆实现对象比较
对象比较元素的比较对象的比较equalsCompareTo通过比较器比较直接 new 一个比较器来比较重写 equals 方法来比较元素的比较在 Java 当中,基本类型的对象可以直接比较大小。代码如下:public static void main(String[] args) { int a = 10; int b = 20; System.out.println(a > b); System.out.println(a < b); System原创 2022-02-26 17:06:12 · 424 阅读 · 21 评论 -
轻松掌握堆的使用
堆堆的概念实现堆定义参数向下调整说明过程如图创建堆向上调整判断是否满插入堆判断堆是否为空出堆顶元素拿到堆顶元素堆排序代码测试测试堆排序优先级队列堆的概念堆是一颗顺序存储的二叉树,激素hi将二叉树层序遍历放到数组当中,是完全二叉树。已知双亲(parent)的下标,则:左孩子(left)下标 = 2 * parent + 1。右孩子(right)下标 = 2 * parent + 2。已知孩子(不区分左右)(child)下标,则:双亲(parent)下标 = (child - 1) /原创 2022-02-25 21:29:27 · 877 阅读 · 17 评论 -
一文掌握二叉树
这里写目录标题树形结构节点的度树的度叶子结点或终端结点双亲结点或父结点孩子结点或子结点根节点结点的层次树的高度或深度兄弟节点树的表示形式二叉树二叉树的组成情况两种特殊的二叉树二叉树的性质二叉树的存储实现二叉树实现类创建树前序遍历中序遍历后序遍历获取二叉树当中结点的个数遍历方法子问题方法二级目录三级目录树形结构树是一种非线性的数据结构,它是由 n 个有限节点组成一个具有层次关系的集合。因为看起来像倒过来的树,所以叫做树形结构。树形结构当作子树不能有交集,否则就不是树形结构。节点的度一个结点含有子树原创 2022-02-12 17:51:45 · 1101 阅读 · 20 评论 -
队列的使用及实现队列
队列的使用及实现队列的概念普通队列 Queue双端队列 Deque循环队列队列的使用插入元素 add offer删除元素 remove poll得到队头元素 element peek双端队列的使用插入删除得到队头队尾元素实现队列实现 Node定义队头和队尾向队列当中增加元素判断是否为空在队列当中弹出元素得到队头元素测试循环队列计算循环队列的下标图示第三种方法实现循环队列初始化入队判满判空出队得到队头元素得到队尾元素测试:队列的概念队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,原创 2022-02-02 22:20:18 · 5253 阅读 · 10 评论 -
栈的轻松使用及手把手实现栈
这里写目录标题栈的概念与特点栈的使用压栈出栈求得栈顶元素判断栈是否为空栈的比较手把手实现栈写出顺序表判断是否满了压栈判断是否为空出栈比较栈顶元素栈的大小测试栈的概念与特点栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。如图所示:这里的 1 2原创 2022-01-30 17:02:13 · 665 阅读 · 18 评论 -
轻松掌握List
这里写目录标题包装类装箱与拆箱(装包与拆包)阿里面试题ListList 使用List 的多种输出方式直接通过字符串输出通过 for 循环打印通过 foreach 来输出通过迭代器打印专门打印 List 的迭代器ListIterator 和 Iterator 的关系二级目录三级目录包装类包装类是根据基本类型出现的,八大基本类型对应着八种包装类:要注意的是:String 不是包装类。包装类的好处在于:可以完成对数据的操作。例如:把字符串变为整形:public static void main(Stri原创 2022-01-28 19:12:59 · 1433 阅读 · 17 评论 -
集合与背后的逻辑框架
集合与框架CollectionCollection 创建Collection 使用不加泛型Collection 使用泛型Collection 方法Map 接口Map 的存储结构哈希Map 和 TreeMap 的有序与无序二级目录三级目录CollectionCollection 接口,在 Java 当中,Collection 也是重要的数据结构。Collection 创建在创建 Collection 的时候,要通过 new 关键字来使用。但是查看 Collection 源码的时候,发现 Collec原创 2022-01-25 21:48:43 · 481 阅读 · 14 评论 -
天呐?一男子学会 java ,居然对暗恋女生……
本文手把手教大家用 Java 实现一个发邮件的功能先用 IDEA 新建一个 Maven 项目然后在左边的文件当中创建 class 文件登录 QQ邮箱 获取密码运行,大功告成先用 IDEA 新建一个 Maven 项目如图所示:然后下一步:新建完之后就是这样:然后复制以下代码到文件当中:<dependencies> <dependency> <groupId>org.apache.commons</groupId>原创 2022-01-24 22:00:32 · 437 阅读 · 13 评论 -
一文轻松掌握异常
轻松掌握异常异常的背景初始异常除以 0数组下标越界编译时异常异常的基本用法捕获异常异常程序的执行过程使用 try catch 处理异常的代码运行过程出现多个异常Java 的异常体系父类 Exceptionfinallytry catch finally的返回值异常处理流程自定义异常利用异常实现恢复模型异常的背景初始异常除以 0代码如下:public static void main(String[] args) { System.out.println(10/0);}因为 0 不能做原创 2022-01-23 21:19:57 · 587 阅读 · 15 评论 -
一文了解StringBuffer和StringBuilder的区别
StringBuffer和StringBuilder二者的区别StringBuilder第一种:直接赋值第二种:append 拼接StringBuffer把 String 转化为 StringBuffer转化为 String逆序字符串二者的区别StringBuffer 和 StringBuilder 和 String 是不相同的东西。从内部的方法上来说 StringBuffer 和 StringBuilder 是差不多的。StringBuilder第一种:直接赋值public static原创 2022-01-19 21:41:04 · 402 阅读 · 18 评论 -
不会吧?不会吧?不会还有人不会 String 吧?万字肝爆带你轻松掌握 String
这里写目录标题创建字符串字符串引用代码中的引用比较字符串相等代码一代码二字符串的比较方法equals 使用注意事项字符串常量池直接赋值采用构造方法字符串不可变修改字符串字符,字节与字符串字符与字符串二级目录三级目录创建字符串我们常用的构造字符串的方法有三种:方法一:直接引用:String str = "abcdef";方法二:new 一个字符串对象:String str2 = new String("Hello Bit");方法三:将字符数组转化为字符串:char[] array = {原创 2022-01-16 16:34:19 · 1058 阅读 · 15 评论 -
轻项目练习——图书管理代码
图书管理项目意义项目的核心需求类的设计创建图书相关的类创建 Book 类创建 BookList 类创建操作相关的类AddOperationBorrowOperationDelOperationDisplayOperationExitOperationFindOperationIOperationReturnOperation标题项目意义利用前面所学的知识点:类,抽象类,封装,继承,多态,接口等综合起来的应用。项目的核心需求1、简单的登录2、管理端整理书籍(该功能为可扩展功能)查阅书籍增加书原创 2022-01-14 14:36:47 · 847 阅读 · 13 评论 -
抽象类和接口
抽象类和接口抽象类使用抽象类的注意事项二级目录三级目录抽象类就像这个代码:class Shape { public void draw(){ System.out.println("Shape::draw()"); }}class Rect extends Shape{ public void draw() { System.out.println("♦"); }}class Flower extends Shape{ @原创 2022-01-13 15:14:00 · 643 阅读 · 10 评论 -
多态?那不有手就行
多态向上转型向上转型--方法传参向上转型--方法返回动态绑定方法重写重写的注意重写方法的权限重写和重载的区别理解多态三级目录向上转型在上一篇 包和继承 当中我们写继承的关系的时候,写了这样的代码:Bird bird = new Bird("圆圆"); 当然,我们也可以写成这样:Bird bird = new Bird("圆圆"); Animal bird2 = bird; 或者下面这样:Animal bird2 = new Bird("圆圆"); 此时 bird2 就是一个父类(An原创 2022-01-11 15:36:32 · 1254 阅读 · 24 评论 -
一文读懂包和继承
包包导入包中的类静态导入将类放在包中常见的系统包继承语法protected 关键字Java 对于字段和方法的四种访问权限继承的注意事项final 关键字组合包包是组织类的一种方式。使用包是为了保证类的唯一性(因为我们工作的时候,一个项目是由很多人来完成的,可能会出现相同的类名,所以可以把相同的类名写在不同的包里,就不用担心类名重复了。)导入包中的类在我们使用的时候,最先用到的就是 Java 的 util 包。比如输入一个数的时候,就要导入 util 包地下的 Scanner 类。语句是:impor原创 2022-01-07 17:43:22 · 970 阅读 · 5 评论 -
手把手实现双链表
手把手实现双链表双链表原理双链表实现定义节点输出节点得到链表的长度查找是否包含关键字 key 在链表当中头插法尾插法删除第一次出现关键字为key的节点找到要插入位置的节点在任意位置插入一个数据节点删除所有值为 key 的节点清空链表双链表原理双向链表的实现就是在单链表基础上又增加了一个指向前面节点的引用。原理图如下:因为头节点是没有前驱节点的,所以头节点的 prev 是 null ,而尾节点是没有下一个节点的,所以尾节点的 next 是 null 。双链表实现定义节点写一个类,将节点的值,前一原创 2021-12-04 20:56:00 · 786 阅读 · 19 评论 -
轻松实现单链表——Java
单链表什么是链表?链表的实现链表的初始化创建一个头节点创建链表打印链表查找链表是否包含关键字 key求单链表的长度二级目录三级目录什么是链表?链表是一种物理存储结构上非连续存储结构,连接顺序是通过链表链表当中的引用来实现的。也就是说一个节点内存着下一个节点的地址。但要注意的是,链表的最后一个节点的指向是 null 。如下图所示:head 表示链表的第一个头节点。next 就是指向下一个节点的地址,也是下一个地址的引用。链表的实现链表的初始化在实现链表的时候,每一个节点都有两个元素:链表的值和下原创 2021-11-29 16:47:33 · 1010 阅读 · 26 评论 -
手把手教你学会顺序表
顺序表顺序表概念接口实现先初始化顺序表打印顺序表返回顺序表的长度判断顺序表满没满在 pos 位置新增元素判断是否包含某个元素查找某个元素的位置,找不到就返回 -1判断顺序表是否为空获取 pos 位置的元素把 pos 位置的元素设置为 val删除第一次出现的元素 key清空顺序表顺序表概念顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,我们这里是用数组存储数据。在数组上完成数据的增删查改。线性表分为:静态顺序表:使用定长数组存储。动态顺序表:使用动态开辟的数组存储。静态顺序表适原创 2021-11-06 13:56:52 · 638 阅读 · 13 评论 -
Java——时间复杂度、空间复杂度详解
复杂度算法效率时间复杂度什么是时间复杂度推导大 O 阶的方法算法情况计算冒泡排序的时间复杂度计算二分查找的时间复杂度计算阶乘递归的时间复杂度计算斐波那契递归的时间复杂度?空间复杂度计算冒泡排序的空间复杂度计算斐波那契数列的空间复杂度(非递归)计算阶乘递归Factorial的时间复杂度算法效率在使用当中,算法效率分为两种,一是时间效率(时间复杂度),二是空间效率(空间复杂度)。时间复杂度是指程序运行的速度。空间复杂度是指一个算法所需要的额外的空间。时间复杂度什么是时间复杂度计算程序运行的时间不能拿简原创 2021-11-04 18:54:40 · 10083 阅读 · 17 评论 -
Java重点 —— 类和对象
类和对象什么是类、对象?类和类的实例化字段的初始化类当中实现方法static 静态关键字封装private 实现封装setter 和 getter 方法构造方法this 关键字匿名对象什么是类、对象?因为计算机并不能像我们人这样去理解世界上的东西,所以为了更好的编辑,就抽象出了类和对象。类就是把功能放在一起,然后由一个人去调用这个功能,然后再编辑对应的功能。调用者就是对象的实现者类和类的实例化类是一类对象的统称,对象就是这一类具体化的实例创建类的关键字:class举例:我们坐年糕的模子就是一个类原创 2021-11-03 16:40:49 · 1006 阅读 · 14 评论 -
递归——Java版
递归递归是什么分析递归的过程递归练习按顺序打印一个数的每一位递归是什么就是一个方法在执行的时候,自己调用自己。递归的要求:1 有一个趋近于终止的条件2 实现递归要去推导出一个递推公式递归就是递下去,归上来。求 5 的阶乘,代码举例:public static int fact(int n){ if(n == 1){ return n; } return n*fact(n - 1);}public static void main(String[]原创 2021-10-28 16:54:59 · 289 阅读 · 12 评论 -
Java - 逻辑控制
逻辑控制顺序结构分支结构if 语句悬垂 else 问题switch 语句循环结构while 循环二级目录三级目录顺序结构顺序结构就是按照代码从上往下执行,我们运行的程序就是从上往下的顺序结构,当遇到方法的时候,才去执行方法。例如:System.out.println("aaa");System.out.println("bbb");System.out.println("ccc");当改变代码顺序的时候,输出的结果也不一样。例如:System.out.println("bbb");Sys原创 2021-10-21 16:36:30 · 648 阅读 · 6 评论 -
Java——运算符
Java运算符运算符算术运算符除号:/取模/取余:%增量赋值运算符:+= -= *= /= %=自增/自减运算符:++ -\-关系运算符:== != < > <= >=逻辑运算符:&& || !逻辑与 &&逻辑或 ||逻辑非 !短路求值位运算符 & | ~ ^按位与 &按位或 |按位取反 ~按位异或 ^移位运算符左移运算符:<<右移操作符:>>无符号右移:>>>条件运算原创 2021-10-16 14:28:21 · 513 阅读 · 8 评论 -
初始Java——数据类型
Java的数据类型变量整型变量 int长整型变量 long单精度浮点数 float双精度浮点数 double字符类型 char字节类型 byte短整型变量 short布尔类型变量 boolean字符串类型 String变量整型变量 int在 Java 当中,最常用的也是整型变量。语法如下:int 变量名 = 初始值;代码示例:int num = 10;System.out.println(num) ;这里就是定义一个整型变量,变量名是 num 赋初值为 10。然后输出 num 的值。原创 2021-10-13 19:27:53 · 1156 阅读 · 11 评论