- 博客(15)
- 收藏
- 关注
原创 自定义@Log实现
import java.lang.annotation.*;@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public @interface Log { String value() default "默认日志";}import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.re
2021-07-16 13:59:43 259 2
原创 什么是线程死锁?如何避免死锁?
什么是线程死锁线程死锁描述的是这样⼀种情况:多个线程同时被阻塞,它们中的⼀个或者全部都在等待某个资源被释放。由于线程被⽆限期地阻塞,因此程序不可能正常终⽌。假如线程 A 持有资源 2,线程 B 持有资源 1,他们同时都想申请对⽅的资源,所以这两个线程就会互相等待⽽进⼊死锁状态。产⽣死锁必须具备的四个条件互斥条件:该资源任意⼀个时刻只由⼀个线程占⽤。请求与保持条件:⼀个进程因请求资源⽽阻塞时,对已获得的资源保持不放。不剥夺条件:线程已获得的资源在末使⽤完之前不能被其他线程强⾏剥夺,只有⾃⼰使⽤完毕
2021-07-15 14:09:12 960
原创 Java模拟生产者消费者问题
什么是线程死锁线程死锁描述的是这样⼀种情况:多个线程同时被阻塞,它们中的⼀个或者全部都在等待某个资源被释放。由于线程被⽆限期地阻塞,因此程序不可能正常终⽌。假如线程 A 持有资源 2,线程 B 持有资源 1,他们同时都想申请对⽅的资源,所以这两个线程就会互相等待⽽进⼊死锁状态。产⽣死锁必须具备的四个条件互斥条件:该资源任意⼀个时刻只由⼀个线程占⽤。请求与保持条件:⼀个进程因请求资源⽽阻塞时,对已获得的资源保持不放。不剥夺条件:线程已获得的资源在末使⽤完之前不能被其他线程强⾏剥夺,只有⾃⼰使⽤完毕
2021-07-15 13:51:01 214
原创 插值查找算法
插值查找原理插值查找算法类似于二分查找,不同的是插值查找每次从自适应 mid 处开始查将二分查找中的求 mid 索引的公式 , 左边索引 left, 右边索引 right ,mid = (left + right ) / 2 = left + (right - right) / 2 = left + 1 / 2 * (right - left)而插值查找,则将mid =left + 1 / 2 (right - left) 的 式子改为1 / 2 不再是固定的,而是mid = left + (ke
2021-07-04 13:05:06 154
原创 基数排序(桶排序)
基数排序(桶排序)介绍:基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或 bin sort,顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序法基数排序(Radix Sort)是桶排序的扩展基数排序是 1887 年赫尔曼·何乐礼发明的。它是这样实现的:将整数按位数切割成不同的数字,然后按每个位数分别比较。基数排序基本
2021-06-30 10:13:36 457
原创 中缀表达式转后缀表达式并计算
中缀表达式就是平常的式子如: (3+4)×5-6,转化为逆波兰表达式(后缀表达式)为: 3 4 + 5 × 6 -3 4 + 5 × 6 - 计算步骤:1.从左至右扫描,将 3 和 4 压入堆栈;2.遇到+运算符,因此弹出 4 和 3(4 为栈顶元素,3 为次顶元素),计算出 3+4 的值,得 7,再将 7 入栈;3.将 5 入栈;4.接下来是×运算符,因此弹出 5 和 7,计算出 7×5=35,将 35 入栈;5.将 6 入栈;6.最后是-运算符,计算出 35-6 的值,即 29,由..
2021-06-29 15:27:32 257
原创 希尔排序
希尔排序希尔排序的思想是使数组中任意间隔为 h 的元素都是有序的。这样的数组被称为 h 有序数组。简单来说,希尔排序和插入排序一致,但插入排序是比较和操作相邻的元素,希尔排序是比较和操作相邻h的元素。希尔排序的效率取决于增量值h的选取,时间复杂度并不是一个定值。开始时,h取值较大,子序列中的元素较少,排序速度快,克服了直接插入排序的缺点;其次,h值逐渐变小后,虽然子序列的元素逐渐变多,但大多元素已基本有序,所以继承了直接插入排序的优点,能以近线性的速度排好序。(转自CSDN)代码实现packa
2021-05-13 11:38:24 59
原创 插入排序
插入排序与选择排序一样,当前索引左边的所有元素都是有序的,但它们的最终位置还不确定,为了给更小的元素腾出空间,它们可能会被移动。但是当索引到达数组的右端时,数组排序就完成了和选择排序不同的是,插入排序所需的时间取决于输入中元素的初始顺序。例如,对一个很大且其中的元素已经有序(或接近有序)的数组进行排序将会比对随机顺序的数组或是逆序数组进行排序要快得多。对于随机排列的长度为 N 且主键不重复的数组,平均情况下插入排序需要~ N^2/4 次比较以及~ N^2/4 次交换。最坏情况下需要~ N^2/2 次
2021-05-06 11:58:34 63
原创 选择排序-JAVA
选择排序找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。这种方法叫做选择排序,因为它在不断地选择剩余元素之中的最小者。对于长度为 N 的数组,选择排序需要大约 N^2/2 次比较和 N 次交换运行时间和输入无关。为了找出最小的元素而扫描一遍数组并不能为下一遍扫描提供什么信息。这种性质在某些情况下是缺点,因为使用选择排序的人可能会惊讶地发现,
2021-05-06 11:17:22 71
原创 环形链表:Josephu问题
Josephu 问题为:设编号为 1,2,… n 的 n 个人围坐一圈,约定编号为 k(1<=k<=n)的人从 1 开始报数,数到 m 的那个人出列,它的下一位又从 1 开始报数,数到 m 的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。单向环形链表介绍存在两个指针,一个头指针:first,一个指向尾last...
2021-05-06 10:59:58 81
原创 双向链表
单向链表的缺点分析单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找。单向链表不能自我删除,需要靠辅助节点 ,而双向链表,则可以自我删除。对上图的说明:遍历方和 单链表一样,只是可以向前,也可以向后查找添加 (默认添加到双向链表的最后)先找到双向链表的最后这个节点temp.next = newHeroNodenewHeroNode.pre = temp修改 思路和 原来的单向链表一样删除因为是双向链表,因此,我们可以实现自我删除某个节点直接找到要删除的
2021-03-04 13:36:49 151 1
原创 将500张图片按一定数量存放到不同的文件夹里,每个文件夹存放20张
将500张图片按一定数量存放到不同的文件夹里500张图片,每个文件夹存放20张import java.io.*;/** * @date 2021/02/23 */public class CopyFile{ public static void main(String[] args) { File file = new File("D:\\BaiduNetdiskDownload\\tx\\壁纸精选500张(三)"); // 获得图片名列表
2021-03-03 14:32:50 1659 1
原创 单链表
链表(Linked List)介绍链表是有序的列表,但是它在内存中是存储如下链表是以节点的方式来存储,是链式存储每个节点包含 data 域, next 域:指向下一个节点.如图:发现链表的各个节点不一定是连续存储.链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定单链表(带头结点) 逻辑结构示意图如下单链表简单实现:/** * 单向链表 * * @date 2021/02/24 */public class SingleLinkedListDemo { p
2021-03-02 14:44:53 68
原创 队列:数组实现
队列介绍队列是一个有序列表,可以用数组或是链表来实现。遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出示意图:(使用数组模拟队列示意图)数组模拟队列思路队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中 maxSize 是该队列的最大容量。因为队列的输出、输入是分别从前后端来处理,因此需要两个变量 front 及 rear 分别记录队列前后端的下标,front 会随着数据输出而改变,而 rear 则是随着数据输入而改变,如图所示:
2021-02-25 09:52:58 673
原创 稀疏数组
当一个数组中大部分元素为0,或者为同一个值的数组时,记录了很多没有意义的数据,可以使用稀疏数组来保存该数组。稀疏数组的处理方法是:记录数组一共有几行几列,有多少个不同的值把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模package datastructure;import java.io.File;import java.io.FileWriter;import java.io.IOException;/** * 稀疏数组 * * @date 2021
2021-02-24 10:00:16 155 4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人