hutool-poi针对 POI 中 Excel 和 Word 的封装。hutool-socket基于 Java 的 NIO 和 AIO 的 Socket 封装。...① 保留小数保留小数的方法主要有两种:NumberUtil.round 方法主要封装 BigDecimal 中的方法来保留小数,返回 BigDecimal,这个方法更加灵活,可以选择四舍五入或者全部舍弃等模式...④ 随机数NumberUtil.generateRandomNumber 生成不重复随机数 根据给定的最小数字和最大数字,以及随机数的个数,产生指定的不重复的数组。...NumberUtil.generateBySet 生成不重复随机数 根据给定的最小数字和最大数字,以及随机数的个数,产生指定的不重复的数组。...布隆过滤器的原理是,当一个元素被加入集合时,通过 K 个散列函数将这个元素映射成一个位数组中的 K 个点,把它们置为 1。
另一个角度讲,所有的复杂都是简单元素的加工和组合,百变不离其宗,基础就是这种简单元素。 所以,我们先来学习下 Java 最基础的部分!本篇文章聊聊 Java 程序的结构,变量以及数据类型。...Java 程序的结构 学习一个新东西,我建议先看它的结构,这样有了整体的认知之后,再去学习细节,就能更好的认识到每个细节点在整体中的位置和作用,可以更好的理解整体和局部之间的关系。...命名的时候一般大写字母开头,可以是字母数字下划线的组合,不过最规范的是大写字母开头的驼峰式命名。 main 方法是 Java 程序必备的一个东西,它是 Java 程序的执行入口,声明也是固定的。...但在我的经验里,有它比没有它强,因为代码虽说是给机器执行的,但却是给人看的,好的代码注释,是能够提升代码的可读性和可维护性的。我这个例子里写的注释有类注释、方法注释、行注释和多行注释。...相应地,有两种数据值可以存储在变量中,作为参数传递,由方法返回,并对其进行操作: 原始值和引用值。 ? 基本类型 我们先看下基本类型。
Hutool 中的工具方法来自每个用户的精雕细琢,它涵盖了 Java 开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当; Hutool 是项目中“util”包友好的替代...hutool-poi 针对 POI 中 Excel 和 Word 的封装。 hutool-socket 基于 Java 的 NIO 和 AIO 的 Socket 封装。...① 保留小数 保留小数的方法主要有两种: NumberUtil.round 方法主要封装 BigDecimal 中的方法来保留小数,返回 BigDecimal,这个方法更加灵活,可以选择四舍五入或者全部舍弃等模式...④ 随机数 NumberUtil.generateRandomNumber 生成不重复随机数 根据给定的最小数字和最大数字,以及随机数的个数,产生指定的不重复的数组。...NumberUtil.generateBySet 生成不重复随机数 根据给定的最小数字和最大数字,以及随机数的个数,产生指定的不重复的数组。
# LeetCode-面试题04-二维数组中的查找 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。...请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。...可以从第一行的最大数开始与目标数target比较,如果第一行的最大数比target大的话,这一列就可以排除不是要找的位置了,因为第一行也是一列的最小数,只有当target比第一行某一列大的时候,才需要往下面找...整个过程一直重复下去就能找到目标数,没有就返回false # 解题思路2 每行是从左往右递增有序的,所以只需要对每行进行二分查找,也能快速得到结果 # Java代码 class Solution {...elif target > matrix[rowlen][collen]: rowlen += 1 return falg # Java
那么能不能有更好的方法来存储,而时间复杂度更低呢? ...算法三:堆 在算法二中,我们已经将时间复杂度由NlogN优化到N*K,不得不说这是一个比较大的改进了,可是有没有更好的办法呢? ...这里我们注意一下,该数组是有序的,一次我们每次查找的时候可以采用二分的方法查找,这样操作的复杂度就降到了logK,可是,随之而来的问题就是数据移动,因为移动数据次数增多了。...基于以上的分析,我们想想,有没有一种既能快速查找,又能快速移动元素的数据结构呢? 回答是肯定的,那就是堆。 借助堆结构,我们可以在log量级的时间内查找和调整/移动。...只待循环完毕返回临时数组的K个元素,即是需要的K个最大数。同算法一其平均时间复杂度为O(KLogK + (N - K))。具体代码实现可以自行完成。
文章目录 《剑指offer》专题—算法训练 day01 一、二维数组的查找 思路一 思路二 二、旋转数字的最小数字 思路一 思路二 三、奇偶互换 相对位置变化 相对位置不变 四、数组中出现次数超过一半的数字...(最小值在最开始),要么是一个旋转(最小值在中间某个地方) 而且,旋转之后有个特征,就是在遍历的时候,原始数组是非递减的,旋转之后,就有可能出现递减,引起递减的数字,就 是最小值 采用二分查找的方式...(注意,只要有两者不相等,我们就能判定应该如何缩小范围) 相关代码: // 二分查找 import java.util.ArrayList; public class Solution {...右 三值都相等时,我们无法判断 mid下标元素在左区间还是右区间 // 我们只能从头遍历,查找数组中的最小值 if(array[left...大家做这种题目一定要看好,调换奇数和偶数的时候 ,有没有说明 相对位置是否发生改变. 当然了,这道题原题是不需要保证奇偶位置不变的,先给大家说一下 相对位置发生改变的题目.
国内的小伙伴可以访问:https://chatgpt.rrjike.com/ 现在,让我们看一下它在编程中的用例,这最终将帮助您成为一名更好的程序员。 如何在编程中使用ChatGPT?...因此,如果您想要 Java 代码查找最大和最小数字,那么您可以使用 ChatGPT 中的命令“编写Java 方法从数组中查找最大和最小数字”,它将为您提供代码解释。...从这段代码中,您还可以提出后续问题。就像 – 解释您不理解的任何特定代码集。 例如 – 从上面提供的代码解决方案中,您可以问“这段代码中‘ arr[i] >largest ’做了什么?”。...如果您想为上述 Java 程序创建 JUnit 测试用例,那么您只需输入“为该方法编写单元测试”,它就会为您提供上述方法的测试用例。 5. 代码改进 代码优化是每个程序员必须具备的最重要的技能之一。...生成样本数据 您还可以使用 ChatGPT 生成虚拟数据,方法是发出命令“为名为 Student 的表生成虚拟数据”。每列都应该有一个 ID、名字、姓氏、卷号和地址“。
(注意后边的结果0带负号) A. 在Java里,整数是用补码表示的。在补码中0只有一种表示方法。另一方面,浮点数则是用 IEEE 标准表示的, 对于0有两种表示方法, 0 和 -0。 Q....某些Java开发人员使用 int a[] 而不是 int[] a 去声明一个数组。这两者有什么区别? A. 在Java中这两种用法都是合法的,他们的作用都是一样的。前者是在C中的定义数组的方法。...在递归代码中创建大数据类型(比如数组)时需要额外注意,随着递归的推进,内存使用将会迅速增加,由于内存使用增加,操作系统管理内存的时间开销也会增加。 4.2 排序与查找 Q....Knuth 教授在 1946年就发表了二分查找的论文,但是第一个正确的二分查找的程序在 1962年在出现。 Q. 在JAVA内建库中有没有排序和查找的函数? A. 有的。...在 java.util.Arrays 中包含了 Arrays.sort() 和 Arrays.binarySearch() 方法。
,而 sleep 则无此限制 wait 方法执行后会释放对象锁,允许其它线程获得该对象锁(我放弃 cpu,但你们还可以用) 而 sleep 如果在 synchronized 代码块中执行,并不会释放对象锁...,synchronized 做了很多优化,如偏向锁、轻量级锁,性能不赖 在竞争激烈时,Lock 的实现通常会提供更好的性能 公平锁 公平锁的公平体现 已经处在阻塞队列中的线程(不考虑超时)始终都是公平的...假设小数组长度是 2^n,key 在小数组内的索引是 key 的二次 hash 值的低 n 位 扩容:每个小数组的扩容相对独立,小数组在超过扩容因子时会触发扩容,每次扩容翻倍 Segment[0]...3/4 时就会扩容 扩容单位:以链表为单位从后向前迁移链表,迁移完成的将旧数组头节点替换为 ForwardingNode 扩容时并发 get 根据是否为 ForwardingNode 来决定是在新数组查找还是在旧数组查找...ThreadLocal 自己作为 key,资源对象作为 value,放入当前线程的 ThreadLocalMap 集合中 调用 get 方法,就是以 ThreadLocal 自己作为 key,到当前线程中查找关联的资源值
* 这个String类包含了一些测评单个字符序列的方法,比如字符串比较,查找字符串, * 提取字符串,和拷贝一个字符串的大小写副本。...可选的“limit”是一个整数,第一个方法中默认是0,允许各位指定要返回的最大数组的元素个数。 常见方法源码分析就这么多了,下面我们再回顾到使用场景中来,尤其是面试中。...看下面这段代码: String str1 = "abc"; // 在常量池中 String str2 = new String("abc"); // 在堆上 关于这段代码,创建了几个对象,网上答案有多重...请看下面这段代码: String s1 = new String("Java"); String s2 = s1.intern(); String s3 = "Java"; System.out.println...答:首先字符串的内容是由一个字符数组 char[] 来存储的,由于数组的长度及索引是整数,且String类中返回字符串长度的方法length() 的返回值也是int ,所以通过查看java源码中的类Integer
数组排序 排序算法是程序设计中最基本的、最重要的算法之一。 排序算法有很多,比较常用的有选择法、冒泡法、比较法和插入法等。...选择排序法 1.从n个数中选出最小数的下标,然后将最小数与第一个数交换位置; 2.除第1个数外,其余n-1个数再按步骤1的方法选出次小的数,与第2个数交换位置; 3.重复步骤n-1遍,最后构成递增序列。...2.一轮排序后,最大数换到了最下面(即小数往上冒,大数往下沉); 3.除最后一个数外,其他n-1个数按步骤:的方法使次大的数下沉; 4.重复步骤n-1遍,最后构成递增序列。...顺序查找思路: 将查找关键值与数组中的元素一一比较, 若相同,则查找成功,否则查找失败。...; } image.png image.png ---- 二分法查找(折半查找) 可大大提高查找的速度,必须是有序数组。
为了满足这个要求,我们需要: 在尽可能靠右的低位进行交换,需要从后向前查找 将一个 尽可能小的「大数」 与前面的「小数」交换。...比如 123465,下一个排列应该把 5 和 4 交换而不是把 6 和 4 交换 将「大数」换到前面后,需要将「大数」后面的所有数重置为升序,升序排列就是最小的排列。...算法流程: 标准的“下一个排列”算法可以描述为: 从后向前查找第一个相邻升序的元素对 (i,j),满足 A[i] < A[j]。...,说明当前 [begin,end) 为一个降序顺序,则直接跳到步骤 4 # Java代码 class Solution { public void nextPermutation(int[] nums...,使后面的数组升序,保证整个数组是下一个最大数组 reverse(nums, j, len - 1); } public void swap(int[] nums, int
所谓数组,就是一个长度固定的容器,是一个固定长度的元素序列,在java程序中,还必须保证容器中的元素都具备相同的数据类型。...创建数组 我们先看下面这段代码: int a[]; a= new int[5]; 在java中[]表示数组,int a[]; 声明了一个int类型的数组,数组名也就是我们的变量名...数组在内存中的存储 数组中的元素存储在一个连续性的内存块中的。数组的变量名,其实存储的就是数组的内存地址。 我们看下面这段代码: ?...至于完整的输出是啥,上一小节,你敲了代码,自己应该猜得到!!! 数组元素查找 下面我们来处理一个实际性的问题——编写一个方法,把数组a中的最大元素找出来。...代码可以给你,好好的看看,但是想要使用嘛,还是自己敲代码吧。 小思考: 思考下还有没有其他实现方式? 课后小练习: 编写一个方法,遍历输出数组里的值。 编写一个方法,返回数组里最小的元素。
代码分析: 这段代码是一个二分查找算法,接收一个已排序的整数数组和一个关键字,返回关键字在数组中的索引值(如果存在)或者-1(如果不存在)。 ...最后,我们使用Arrays.copyOf()方法返回一个新的数组,长度为j。代码分析: 这段代码是一个静态方法,接收一个整数数组作为参数,并返回一个去重后的整数数组。 ...: 这段代码实现了一个移除数组中重复元素的方法,算法的时间复杂度是O(nlogn),其中n为数组的长度。...在 main 方法中,没有任何代码。执行结果:小结 数组是Java中常用的数据结构之一,能够优化算法并提高性能。...通过学习这些应用场景,可以更好地优化算法并提高性能,同时也能够帮助开发者更好地应对实际工作中的问题。 总的来说,本文对数组的应用场景进行了详细的讲解,并提供了相应的示例代码和测试用例。
在二分法发明之前,如果要查找某个数是否在数组中,就只能是把数组遍历一遍,然后一个一个的依次比较了,在数据量不大的情况下这么做其实也没啥问题,但是数据量达到一定的级别,或者在一些比较极端的情况下,比如数组中不存在这个数...下面我再结合一段用 python 实现的二分算法代码,你可以对照着看。...1、循环终止条件,是 low <= high,不能写成 low < high,不然查找数组的边界值(数组的第一个元素或最后一个元素)可能会查找失败,你自己可以去试一下。...3、在每次对半缩小数组后,low 和 high 移动的问题,可以看到代码里都分别有加一和减一的操作,如果是直接写成 low = mid 和 high = mid 的话可能会造成死循环,我觉得死循环在这里不太好理解...当然这就是最简单的二分法,数组中没有重复的元素,如果存在重复的元素那情况又不太一样了,后面的文章再细说。二分法虽然简单,但我还是强烈建议你亲自动手去写一写。
所以有没有可能,设计者给出了一堆hash值重复的name,数量又多,导致每次插入、查找时都要遍历链表,性能下降,导致超时?...于是再仔细审题,我发现输入的姓名和成绩是有限制的: name保证长度不超过6,仅由小写英文字母组成,每个名字代表唯一一个同学 x为1位小数,0≤x≤300 name最长为6,且为小写字母,这点给了我一点启发...优化内存占用 上面的代码用到了2个数组,一个存最大值,一个存值是否存在,一个数组是1513361KB,2个就是3026722KB,是最大内存限制的5.7倍 var scores [387420488]int32...终于发现问题 后来我又尝试了很多方法都不行,比如怀疑是不是Go的map性能不行,换成Java试试,结果还是不行。 最后我在网上搜索牛客网时发现了一个突破口(对,没错,这次比赛是在牛客网上举办的)。...之前的方法能行吗 我把几个版本的输入改了之后,看看通过后的耗时和内存 版本 是否通过 耗时 内存 map版 是 315ms 10096KB 27进制版 否
这个简单的代码片段方法会将你的非数组值或数据转换为数组形式。...此代码段方法将返回列表中的最大数字。...这是从列表中找到最大数字的最快方法。...这段代码将向你展示如何生成一个带有n数字且在一个范围内的随机整数数组。...这段代码是从数组中删除重复项的一种快速简便的方法。
函数名 参数 意义 random 无参数 随机生成[0-1]之间浮点数 uniform 2个整型参数:最小数,最大数 随机生成最小最大之间的浮点数 randint 2个整型参数:最小数,最大数 随机生成最小最大之间的整数...randrange 3个整型参数:最小数,最大数,步长 随机生成最小最大之间的间隔步长整数 下面,我们来看看这些常用的随机数生成函数的应用: import random # 随机生成[0-1]之间浮点数...也是最普遍的随机数用法。...random.sample 博主经常编写刷评论的脚本,但是对于爬虫来说,有一个与众不同的随机数需求。比如,我要评论20个网页,那么将20个网页放在数组中,就会有(0,19)索引进行选择。...在概率论与统计学中,三角形分布是低限为a、众数为c、上限为b的连续概率分布。 triangular()方法返回两个指定数字(包括两者)之间的随机浮点数,但是您也可以指定第三个参数,即mode 参数。
JAVA为数据结构中的映射定义了一个接口java.util.Map,而HashMap Hashtable和TreeMap就是它的实现类。...LinkedList适合指定位置插入、删除操作,不适合查找;ArrayList、Vector适合查找,不适合指定位置的插入、删除操作。...这两个方法应该都比较熟悉,把需要并行处理的代码放在run()方法中,start()方法启动线程将自动调用 run()方法,这是由jvm的内存机制规定的。...java当中float以及double数据类型的掌握 java当中默认声明的小数是double类型的; double d=4.0 如果声明: float x = 4.0则会报错,需要如下写法:...6-7位 double 型 内存分配8个字节,有效小数位15位 float和double只能用来做科学计算或者是工程计算; 在商业计算中我们要用java.math.BigDecimal。
领取专属 10元无门槛券
手把手带您无忧上云