![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 92
北顾.岛城
半吊子技术,半吊子人生
展开
-
Java里的Lambda表达式是什么样的?怎么和Stream结合?
Lambda表达式也被称为箭头函数匿名函数闭包。Lambda表达式体现的是轻量级函数式编程思想“->” 符号是Lambda表达式核心操作符号,符号左侧是操作参数,符号右侧是操作表达式JDK8新特性java.util.function提供了大量的函数式接口Predicate 接收参数T对象,返回一个boolean类型结果Consumer 接收参数T对象,没有返回值Function 接收参数T对象,返回R对象Supplier 不接受任何参数,直接通过get()获取指定类型的对象。原创 2024-02-23 15:19:56 · 785 阅读 · 0 评论 -
HashMap源码剖析——三大重点(容量为2次幂的原因,hash值的计算方法以及扩容过程详解)
文章目录一、图解数据结构1. 基础数据结构2. HashMap二、源码分析1. HashMap的创建以及扩容2. 节点的插入、查询与删除3. 如何提高散列以及冲突的解决方法4. 序列化与反序列化一、图解数据结构1. 基础数据结构(1)数组数组的本质就是一块连续的内存,存放着具有共同特性的内容。可以通过数组的下标,快速定位和操作数组元素。但它的插入和删除操作十分不便,需要移动插入或删除位置后面的所有元素。优点:连续的内存,通过下标可以快速寻址;缺点:插入删除节点困难;(2)单链表单链表原创 2021-05-23 14:10:41 · 370 阅读 · 1 评论 -
Java基本数据类型转换时的一些小坑——自动类型转换、强制类型转换
文章目录一、Java的基本数据类型(4类8种)1. 四大类2. 八种类型二、两个经典的数据类型转换例子(经典面试题)1. +=运算符的数据类型转换2. 常量与变量的数据类型转换写Java算是很久了,正好最近重新捡起Java的基本知识看看发现很多东西竟然都要忘掉了,特意记录一下吧。一、Java的基本数据类型(4类8种)1. 四大类(1)整型:byte、short、int(默认)、long(2)浮点型:float、double(默认)(3)字符型:char(4)布尔型:boolean2. 八种类原创 2021-05-17 17:18:33 · 265 阅读 · 0 评论 -
直接使用for循环删除ArrayList的元素有什么影响?
许久都未写技术文章了,实在是有些怠惰了,自觉惭愧啊。在Java中使用for循环直接删除ArrayList中的特定元素是错的,不同的for循环方式会发生不同的错误,比如泛型的for会抛出ConcurrentModificationException,而普通的for想要删除集合中重复且连续的元素则只能删除第一个。错误原因:我们打开JDK的ArrayList源码,看一下ArrayList中的remove方法是如何实现的(注意ArrayList中的remove有两个同名方法,只是入参不同,这里我们看的是入参原创 2020-12-13 23:48:57 · 968 阅读 · 1 评论 -
如何写出一段死锁的代码
突然想到写一段死锁的代码,虽然死锁的原因和条件都很清楚,但是还没真正自己写出过一段死锁的代码。先复习一下产生死锁的原因和四个必要条件。产生死锁的原因系统资源不足进程运行顺序不合理系统资源分配不当产生死锁的四个必要条件互斥条件:一个资源每次只能被一个进程使用。请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。这四个条件是死锁的必要条件,只要系原创 2020-10-08 21:20:33 · 613 阅读 · 0 评论 -
Java类中的静态与普通初始代码块、构造方法等的初始化顺序
先说结论,初始化顺序如下:基类静态代码块,基类静态成员字段(并列优先级,按照代码中出现的先后顺序执行,且只有第一次加载时执行);派生类静态代码块,派生类静态成员字段(并列优先级,按照代码中出现的先后顺序执行,且只有第一次加载时执行);基类普通代码块,基类普通成员字段(并列优先级,按代码中出现先后顺序执行);基类构造函数;派生类普通代码块,派生类普通成员字段(并列优先级,按代码中出现先后顺序执行);派生类构造函数。代码示例如下:(1)派生类和基类代码class Log { pub原创 2020-09-30 23:13:05 · 229 阅读 · 0 评论 -
LeetCode 773 LintCode 941 滑动谜题 八数码问题 单向bfs+双向bfs+A*算法+IDA*算法解法汇总
文章目录@[toc]一、 细节说明二、 具体解法1. bfs法1.1 单向bfs(1)hash法(2)康托展开1.2 双向bfs(1)hash法(2)康托展开2. A*算法2.1 使用位置不同块数作为估计函数(1)hash法(2)康托展开2.2 使用曼哈顿距离作为估计函数(1)hash法(2)康托展开3. IDA*算法3.1 使用位置不同块数作为估计函数3.2 使用曼哈顿距离作为估计函数自己实现的LeetCode相关题解代码库:https://github.com/Yuri0314/Leetcode自原创 2020-09-14 19:11:42 · 742 阅读 · 0 评论 -
经典回溯问题:骑士游历问题
题目描述在一个N*N 格子的棋盘上,有一只国际象棋的骑士在棋盘的左下角,骑士只能根据象棋的规则进行移动,要么横向跳动一格纵向跳动两格,要么纵向跳动一格横向跳动两格。骑士从第一个格子出发,每个格子只能访问一次,能否访问完所有的格子, 请找到一个解决方案。题目分析这是一道经典的回溯算法题目,这里的状态就是每一步骑士所在的坐标位置。因为骑士可以跳动的位置总共就有8个位置,所以可以提前定义出跳动的距离数组。每一步只需要将骑士往所有方向上尝试跳动即可。/** * 问题描述:在一个N*N 格子的棋盘上,有一原创 2020-09-07 11:50:05 · 4063 阅读 · 0 评论 -
LeetCode 94 144 145 LintCode 66 67 1783 二叉树的前中后序遍历所有解法总结(史上最全分类总结)
文章目录@[toc]1. 简单说明2. 解法分析2.1 递归法2.2 非递归法2.2.1 一般迭代法2.2.1.1 中序遍历2.2.1.2 前序遍历2.2.1.3 后序遍历2.2.2 统一模板法2.2.2.1 设置结点访问标志2.2.2.2 null值区分2.2.3 Morris遍历法2.2.3.1 中序遍历2.2.3.2 前序遍历2.2.3.3 后序遍历2.2.3.3.1 前序遍历反向2.2.3.3.2 链表逆序打印自己实现的LeetCode相关题解代码库:https://github.com/Yuri原创 2020-08-11 23:08:00 · 350 阅读 · 1 评论 -
Leetcode 155 Min Stack 最小栈 解法分析及相关题目衍生获取队列最大值
文章目录@[toc]题目要求解法分析辅助栈法链表定义法相关题目——O(1)时间获取队列最大值自己实现的LeetCode相关题解代码库:https://github.com/Yuri0314/Leetcode题目要求设计一个支持push ,pop,top操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例:输入:["MinStack","原创 2020-08-06 21:56:38 · 169 阅读 · 1 评论 -
Leetcode 128 longest-consecutive-sequence 最长连续序列 Hash法及并查集解法
文章目录题目要求1. Hash法1(官方解法)2. Hash法2(累积长度)3. Hash法3(双向查找动态删除)4. 并查集法1(使用双Map模拟并查集)5. 并查集法2(双数组模拟并查集,Map记录数值到数组索引的映射)总结题目要求给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。示例:输入: [100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。看到这道题我首先的思路是对数组先进行排原创 2020-08-06 20:40:19 · 196 阅读 · 0 评论 -
Tomcat源码剖析笔记总结(超长干货——逐步分析)
主要分四部分:套娃式架构设计架构属于设计层次,源码是对设计的实现Tomcat的架构设计比较独特,属于套娃式架构设计源码剖析的原则、方法和技巧Tomcat实例构建(启动过程源码分析)Servlet请求处理链路(Servlet如何被Tomcat处理的)文章目录@[toc]一、Tomcat架构设计1.1 Tomcat的功能(需求)1.2 Tomcat的架构(架构就是为了完成功能...原创 2020-04-19 18:00:30 · 3632 阅读 · 2 评论 -
Java实现给图片局部打马赛克
因为项目需要用到给图片打码的功能,本身实现也不是很复杂,就没有借鉴其他类库,参照网上的一些资料实现了一个简单的给图片局部打码的功能。也可以给一个图片的多个局部进行打码。ImageArea.javapackage com.test;/** * 图片区域类 * @author hty * */public class ImageArea { int x; //指定区域左上角横坐标...原创 2019-03-31 18:07:41 · 3641 阅读 · 6 评论