2022
05-20
05-20
Java SoftReference类案例详解
软引用简介软引用是用来表示某个引用会被GC(垃圾处理器)收集的类。当有引用指向某个obj的时候,通常发生GC的时候不会把这个对象处理掉,但是被软引用包装的对象,当应用内存将要被耗尽的时候-->即将发生OOM,垃圾处理器就会把它带走。这么看来,软应用的生命周期还是很长的,可以用来做缓存处理。我们可以通过以下方式来创建一个软引用:SoftReference<String>ref=newSoftReference<String>("Helloworld");接收数据:String...
继续阅读 >
目录堆排序知识补充二叉树满二叉树完全二叉树二叉堆代码实现时间复杂度算法稳定性思考总结堆排序这里的堆并不是JVM中堆栈的堆,而是一种特殊的二叉树,通常也叫作二叉堆。它具有以下特点:它是完全二叉树堆中某个结点的值总是不大于或不小于其父结点的值知识补充二叉树树中节点的子节点不超过2的有序树满二叉树二叉树中除了叶子节点,每个节点的子节点都为2,则此二叉树为满二叉树。完全二叉树如果对满二叉树的结点进行编...
目录快速排序问题思路荷兰国旗问题代码实现时间复杂度算法稳定性总结快速排序快速排序是对冒泡排序的一种改进,也是采用分治法的一个典型的应用。JDK中Arrays的sort()方法,具体的排序细节就是使用快速排序实现的。从数组中任意选取一个数据(比如数组的第一个数或最后一个数)作为关键数据,我们称为基准数(pivot,或中轴数),然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序,也称为分...
背景AbstractMethodError异常对于我来说还是比较不常遇见的,最近有幸遇到,并侥幸的解决了,在这里把此种场景剖析一番,进入正题,下面是AbstractMethodError在Java的异常机制中所处的位置:现在明确了AbstractMethodError所具有的特性:1.它是Error的子类,Error类及其子类都是被划分在非检查异常之列的,就是说这些异常不能在编译阶段被检查出来,只能在运行时才会触发。2.通过API文档里面的解释大致得出的结论就是说A依赖于B,...
目录归并排序怎么分怎么治代码实现时间复杂度算法稳定性总结归并排序归并,指合并,合在一起。归并排序(MergeSort)是建立在归并操作上的一种排序算法。其主要思想是分而治之。什么是分而治之?分而治之就是将一个复杂的计算,按照设定的阈值进行分解成多个计算,然后将各个计算结果进行汇总。即“分”就是把一个大的通过递归拆成若干个小的,“治”就是将分后的结果在合在一起。若将两个有序集合并成一个有序表,称为2-路归并,...
目录希尔排序代码实现时间复杂度算法稳定性总结希尔排序一种基于插入排序的快速的排序算法。简单插入排序对于大规模乱序数组很慢,因为元素只能一点一点地从数组的一端移动到另一端。例如,如果主键最小的元素正好在数组的尽头,要将它挪到正确的位置就需要n-1次移动。希尔排序为了加快速度简单地改进了插入排序,也称为缩小增量排序。希尔排序是把待排序数组按一定的数量分组,对每组使用直接插入排序算法排序;然后缩小数量继续...
目录插入排序代码实现动图演示代码实现时间复杂度算法稳定性总结插入排序当我们在玩扑克牌的时候,总是在牌堆里面抽取最顶部的一张然后按顺序在手中排列。插入排序是指在待排序的元素中,假设前面n-1(其中n>=2)个数已经是排好顺序的,现将第n个数插到前面已经排好的序列中,然后找到合适自己的位置,使得插入第n个数的这个序列也是排好顺序的。1.对于未排序数据(一般取数组的二个元素,把第一个元素当做有序数组),在已排序序列...
目录选择排序代码实现动图演示代码实现时间复杂度算法稳定性总结选择排序1.找到数组中最大(或最小)的元素2.将它和数组的第一个元素交换位置(如果第一个元素就是最大(小)元素那么它就和自己交换)3.在剩下的元素中找到最大(小)的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。代码实现对下面数组实现排序:{87,23,7,43,78,62,98,81,18,53,73,9}动图演示代码实现publicclassSelectionSo...
目录冒泡排序代码实现代码实现时间复杂度算法稳定性总结冒泡排序1.从数组头开始,比较相邻的元素。如果第一个比第二个大(小),就交换它们两个2.对每一对相邻元素作同样的工作,从开始第一对到尾部的最后一对,这样在最后的元素应该会是最大(小)的数3.重复步骤1~2,重复次数等于数组的长度,直到排序完成代码实现对下面数组实现排序:{24,7,43,78,62,98,82,18,54,37,73,9}代码实现publicclassBubbleSort{publics...
目录前言CountDownLatch例子CyclicBarrier构造函数例子两者区别前言CyclicBarrier和CountDownLatch这两个工具都是在java.util.concurrent包下,并且平时很多场景都会使用到。本文将会对两者进行分析,记录他们的用法和区别。CountDownLatchCountDownLatch是一个非常实用的多线程控制工具类,称之为“倒计时器”,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。CountDownLatch是通过一个计数器来实现的,计数器...
目录1-代理模式1.1静态代理1.2动态代理1.2Cglib代理总结1-代理模式代理(Proxy)是一种设计模式。提供了对目标对象另外的访问方式,即通过代理对象访问目标对象,这样的优点是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。编程思想:不随意去修改别人已经写好的代码或者方法,如果需要修改,通过代理的方式来拓展该方法。例子:比如邀请一位明星,那么并不是直接连线邀请明星,而是联系明星的经纪...