Java
文章平均质量分 77
Shang.Liang
To Be A Better Programmer
展开
-
「数据结构 | 链表」单链表、双向链表节点操作演示动画
目录1. 什么是链表2. 链表数据结构 2.1 单链表数据接口(Java)2.2 双链表数据结构(Java)3. 单链表操作动画3.1 新增节点3.2 删除节点4. 双向链表操作动画4.1 新增节点4.2 删除节点链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。 2.2 双向链表数据结构(Java)单链表在已知单个节点的情况下,只能在该节点的后续链上增加新的节点,原创 2022-06-20 23:56:30 · 1131 阅读 · 0 评论 -
try-with-resources 代替 try - catch - finally
1、常规 try - catch - finally 写法public String resdFile1(String filePath){ BufferedReader bufferedReader = null; try { bufferedReader = new BufferedReader(new FileReader(filePath)); return bufferedReader.readLine(); } catch (IOE原创 2021-12-20 22:13:00 · 523 阅读 · 0 评论 -
Java LinkedList 用作 栈、队列、双端队列 的各类操作
目录LinkedList 数据存储的基础结构单 Node 信息图示LinkedList 数据存储关系图示LinkedList 作为栈使用push(E):入栈操作,在头部添加元素pop():出栈操作,取出头部元素并将其从栈中移除peek():查看头部元素,不影响栈的结构各方法操作效果图示LinkedList 作为队列使用add(E):添加元素到队列尾部peek():查看队列头部元素,不改变队列结构poll():返回头部元素,并从队列删除该元素LinkedL.原创 2021-06-15 12:09:05 · 2091 阅读 · 5 评论 -
[数据结构与算法] 快速排序-三向切分方式 JAVA 代码实现
目录1. 快速排序2.三向切分快速排序 - Java 实现3. 标准快速与三向切分快排效率对比4. 总结1. 快速排序标准快速排序动画及 JAVA 代码实现[点我查看]2.三向切分快速排序 - Java 实现 /** * 快速排序三向切分 * * @param nums 待排序数组 */ public void quickSortThreeWay(int[] nums) { sortThreeWa...原创 2021-04-14 11:45:53 · 260 阅读 · 0 评论 -
JAVA 泛型中的通配符 T,E,K,V,?
前言Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许开发者在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。泛型带来的好处在没有泛型的情况的下,通过对类型 Object 的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是本转载 2021-01-11 14:19:07 · 186 阅读 · 0 评论 -
等概率随机取数算法 - 洗牌算法 | 链表随机节点 | 随机数索引 - Java 实现
等概率随机取数算法1. 洗牌算法2. 链表随机节点该题目来自力扣 382 题:链表随机节点 (https://leetcode-cn.com/problems/linked-list-random-node/)给定一个单链表,随机选择链表的一个节点,并返回相应的节点值。保证每个节点被选的概率一样。进阶:如果链表十分大且长度未知,如何解决这个问题?你能否使用常数级空间复杂度实现?示例:// 初始化一个单链表 [1,...原创 2020-05-29 19:13:42 · 1062 阅读 · 0 评论 -
[数据结构与算法] 归并排序动画及 JAVA 代码实现
1. 快速排序动画配合如下所示的每阶段排序后结果,更便于理解:排序前 = [14, 2, 25, 17, 7, 38, 34, 5, 42, 15, 42]nums = [2, 14, 25, 17, 7, 38, 34, 5, 42, 15, 42]nums = [2, 14, 25, 17, 7, 38, 34, 5, 42, 15, 42]nums = [2, 14, 25, 7, 17, 38, 34, 5, 42, 15, 42]nums = [2, 14, 25, 7,.原创 2020-05-24 23:00:23 · 456 阅读 · 0 评论 -
[数据结构与算法] 快速排序动画及 JAVA 代码实现
1. 快速排序动画几种排序使用的同一组数据,发现这个快排动画效果不是太好尽量看代码吧,根据代码逻辑 debug 下帮助立理解2.快速排序 Java 实现/** * 快速排序 * * @param numbers 待排序数组 */public void insertionSort(int[] numbers) { int length = num...原创 2020-04-28 19:27:54 · 677 阅读 · 0 评论 -
[数据结构与算法] 插入排序动画及 JAVA 代码实现
1. 插入排序动画2. 插入排序 Java 实现public void selectionSort(int[] numbers) { int length = numbers.length; if (length <= 1) { return; } for (int i = 0; i < length - 1; ++...原创 2020-04-28 08:49:04 · 270 阅读 · 2 评论 -
[数据结构与算法] 选择排序动画及 JAVA 代码实现
1. 选择排序动画2. 选择排序 Java 实现重复(元素个数-1)次 把第一个没有排序过的元素设置为最小值 遍历每个没有排序过的元素 如果元素 < 现在的最小值 将此元素设置成为新的最小值 将最小值和第一个没有排序过的位置交换 ...原创 2020-04-26 21:35:05 · 292 阅读 · 0 评论 -
[数据结构与算法] 冒泡排序动画及 Java 代码实现
目录1. 冒泡排序动画2. 冒泡排序 Java 实现3. 总结时间复杂度空间复杂度排序稳定性1. 冒泡排序动画2. 冒泡排序 Java 实现public void bubbleSort(int[] numbers) { int size = numbers.length; if (size <= 1) { r...原创 2020-04-26 15:13:18 · 345 阅读 · 0 评论 -
[数据结构与算法] 算法复杂度分析 - 大O表示法 - 复杂度曲线
目录1. 大O表示法介绍2. 常见的大O复杂度2.1 O(1)常数时间复杂度2.2 O(logn) 对数时间复杂度2.3O(n)线性时间复杂度2.4O(nlogn) 线性对数时间负载度2.5O(c^n) 指数时间复杂度(c 为常数)2.6O(n^2) 平方时间复杂度2.7O(n!) 阶乘时间复杂度3. 常见时间复杂度曲线1. 大O表示...原创 2020-04-25 21:37:16 · 2577 阅读 · 2 评论 -
Java 高级特性 - 反射机制 (Reflection)
1. 什么是 Java 的反射机制?Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。2. Java 反射机制用途在日常的项目开发过程中,有时会...原创 2020-04-25 00:48:42 · 909 阅读 · 0 评论 -
「SpringBoot 相关注解」@Target 元注解
@Target 介绍Target.java 类位于 JDK 的 rt.jar 内,属于一个 JDK 注解它是用来修饰注解的,是注解的注解,称之为元注解@Documented@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.ANNOTATION_TYPE)public @interface Target { Elemen...原创 2020-04-22 01:32:26 · 639 阅读 · 0 评论 -
「SpringBoot 相关注解」@Retention 元注解
@Retention 介绍Retention.java 类位于 JDK 的 rt.jar 内,属于一个 JDK 注解。它是用来修饰注解的,是注解的注解,称之为元注解。@Documented@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.ANNOTATION_TYPE)public @interface Retention {...原创 2020-04-20 23:04:20 · 1088 阅读 · 0 评论 -
Java 抽象同步队列 AbstractQueuedSynchronizer
1. AbstractQueuedSynchronizer 介绍抽象同步队列 AbstractQueuedSynchronizer ,简称 AQS,它是实现阻塞锁和其他基于先入先出(FIFO)等待队列的同步组件。并发包中锁的底层实现(如 ReentrantLock)的底层实现就是使用 AQS 实现的。2. AQS 内部结构i. 类 ConditionObject 主...原创 2020-04-18 18:56:34 · 307 阅读 · 0 评论 -
Java 中的锁之 ReentrantLock
ReentrantLock 是可重入的独享锁。根据参数可决定其内部是一个公平锁还是非公平锁。1.ReentrantLock 源码解析public ReentrantLock() { sync = new NonfairSync();}public ReentrantLock(boolean fair) { sync = fair ? new FairSync(...原创 2020-04-16 18:40:36 · 265 阅读 · 0 评论 -
Java 常见的锁分类及其特点
锁分类乐观锁 | 悲观锁公平锁 | 非公平锁独享锁 | 共享锁互斥锁 | 读写锁偏向锁 | 轻量级锁 | 重量级锁自旋锁 | 可重入锁 | 分段锁乐观锁 | 悲观锁悲观锁和乐观锁是按按并发情况下资源的分配策略区分乐观锁: 认为对同一数据的并发操作,是不会发生修改的。在进行读取操作是不会上锁,在进行写入操作的时候回判断当前数据是否被修改过。乐观锁的实现方案:版本号机制和...原创 2020-04-15 17:53:46 · 204 阅读 · 0 评论