- 博客(26)
- 收藏
- 关注

原创 Java之排序(下)快排,归并,堆排
快速排序排序思想:分而治之,通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字比另一部分记录的关键字小,则可以分别对这两部分记录继续进行排序,以达到整个序列有序。**时间复杂度:**最好情况下:O(nlog2n) 最坏情况下:O(n^2) 空间复杂度: O(log2n)稳定性: 不稳定优点: 极快,数据移动少选取基准的方式1、固定位置选取基准法(定义最左边l...
2019-02-26 16:09:24
431

原创 Java之排序(上)插入,选择,冒泡,shell(希尔)
冒泡排序时间复杂度:O(n^2)空间复杂度:O(1)稳定性:稳定(没有发生跳跃式的交换)public static void bubbleSort(int[] array) {//5 4 boolean swap = false; for (int i = 0; i < array.length-1; i++) {//趟数 ...
2018-11-23 15:50:32
138
原创 详解线程池
1、为什么要有线程池?答:线程池出现的原因:假设每当一个请求到达就创建一个新的线程,为每个请求在创建和销毁线程上花费的时间和消耗的资源有可能比花在处理实际的用户需求的时间和资源还多。而且大多数的实际场景处理某一次请求的时间是非常短暂的,但是请求的数量会很多,如果我们为每次请求单独创建一个新的线程,那么基本上的所有资源基本上都是被操作系统创建线程,切换线程状态,销毁线程这些操作所占有,使用线程池...
2019-05-09 02:27:08
668
原创 ReenTrantLock重入锁
ReenTrantLock(重入锁) 非公平性锁(默认):不是按照先后顺序,而是按照抢占式来获得锁, 公平性锁(false):按照线程请求锁的顺序来获取锁具体的剖析:ReenTrantLock实现Lock和序列化接口三个内部类:ync、NonfairSync、FairSync抽象类Sync继承了 AbstractQueuedSynchronizer(AQS)类构造函数:Reent...
2019-04-27 18:32:36
233
原创 详解死锁,银行家算法
死锁**概念:**两个或者两个以上的线程在执行过程中,由于竞争资源造成的问题,若无外力作用下,他们将无法推进下去,此时系统处于死锁状态,举例下图死锁产生的原因:因竞争资源产生死锁进程顺序推动不当发生死锁出现死锁的必要条件:1、互斥条件:资源每次只能是一个线程使用-》资源2、请求与保持条件:一个线程因请求资源而阻塞时,对以获取的资源保持不放-》线程3、不可剥夺条件:线程已获取的...
2019-04-27 18:05:40
1374
原创 详解银行家算法
简述:银行家算法是一种可以避免死锁的方法就是以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源就相当于用户向银行家贷款。实现方法:为保证资金的安全,银行家规定:(1) 当一个顾客对资金的最大需求量不超过银行家现有的资金时就可接纳该顾客;(即当资源池中剩余的可利用资源 >= 线...
2019-04-27 17:41:32
23338
10
原创 讲解ConcurrentHashMap,分段锁机制
ConcurrentHashMap简解(1.7)继承关系:public class ConcurrentHashMap<K, V> extends AbstractMap<K, V> implements ConcurrentMap<K, V>, Serializable { private static final long ser...
2019-04-26 18:29:45
5864
原创 问题解答
1、不能做switch的参数类型有些什么? 答:int byte char short 可以 ,对应的包装类也可以。 long float double 不可以。2、3、4、5、6、7、
2019-04-10 13:17:35
296
原创 Java初体验(5)之数组
一维数组格式、初始化● 动态初始化:数据类型 [ ] 数组名 = new 数据类型 [ 数据长度 ];int [ ] arr = new int [5];先进行默认初始化值,在将地址赋给栈,然后在改变初始化的值 //动态初始化 int[] arr = new int[5];//代表可以存储5个int类型,动态初始化 System.ou...
2019-04-03 19:17:27
332
原创 线程的创建方式,操作方法
线程之间的执行是相互独立的,哪一个线程优先执行取决于OS的调度。线程的创建方式(前几种较为常用,进行详细介绍,后续会补进)实现Runnable接口(扩展性较好)1、 创建自定义类并实现Runnable接口,并实现接口中的run方法。2、 实例化自定义类3、将自定义类的实例作为参数给Thread类,创建thread实例4、 调用Thread实例的start方法,启动子线程优势: 自定...
2019-04-01 21:18:34
354
原创 多线程初识
1.什么是线程?进程?线程:进程是操作系统资源分配的单位 例:I/O资源,内存资源…进程:线程是资源调度的单位,真正执行的指令 例:操作数据的执行流(注意!线程属于进程)2.线程与进程之间的关系1.创建进程会给分配相应的内存空间,线程创建则不会给分配内存空间2.一个进程可以包含多个线程,一个线程只隶属于一个进程,一对多的关系3.进程与进程是相互独立隔离的,若一个进程崩溃,不会影响到...
2019-03-31 19:19:25
176
1
原创 StringWriter介绍
简单介绍继承: Writer–>StringWriter,主要是对字符串进行处理构造函数StringWriter() 无参构造函数,使用默认初始字符串缓冲区大小创建一个新字符串writerStringWriter(IFormatProvider) 有参构造函数,使用指定初始字符串缓冲区大小创建一个新字符串writer常用方法介绍写入:● public void write(...
2019-03-27 00:34:11
17822
原创 初识java
Java的特点Java是跨平台的• Java程序的跨平台主要是指字节码文件可以在任何具有Java虚拟机的计算机或者电子设备上运行, Java虚拟机中的Java解释器负责将字节码文件解释成为特定的机器码进行运行。Java是安全的• Java取消了强大但又危险的指针。 由于指针可进行移动运算, 指针可随便指向一个内存区域,而不管这个区域是否可用, 这样做是危险的, 因为原来这个内存地址...
2019-03-26 12:23:40
136
原创 统计十万数据出现的次数,第一个重复的数据,出现次数最多的数据,重复性元素只打印一次
题目10万数据,范围在1~1000,做一下处理**1、统计数据重复出现次数并打印 **首先要生成10万数据,这里我们用了Random类,将产生的元素存入arraylist中ArrayList &lt;Integer&gt; arrayList = new ArrayList&lt;Integer&gt;(10000000); HashMap&lt;Integer,Integ...
2019-03-02 15:57:46
770
原创 集合类之异同比较
ArrayList和Array的区别?答:ArrayList的大小是动态的,可以自己进行有动态扩容;有着丰富的方法和特征;但是只能包含(包装)对象类型Array的大小是固定(自定义大小),可以包含的类型有基本类型和对象类型ArrayList和LinkedList的异同点?各自优势答:相同点:继承关系:List接口下的实现类,具有list提供的方法 -有序性:按照有序插入重...
2019-03-01 11:54:15
241
原创 习题整理集(3)
求连续子数组的最大和?{10,9,-100,8,6} public static int maxHe(int[] array1 ){ int i,j; int MaxSum = 0;//每次开始累加的起始位置的循环 for( i = 0 ; i &amp;amp;lt; array1.length ; i++) { ...
2019-02-18 13:05:03
185
原创 数据结构之BF算法、KMP算法
字符串匹配算法给定两个串,查找一个串是否在另一个串里面(m代表主串长度,n代表子串长度),总共有两中算法,分别如下:BF算法又称为朴素算法(暴力算法),时间复杂度为O(n*m)算法思想:从原字符串str的pos(i)位置出发,与目标字符串sub(j)的第一位进行匹配,若相等,接着匹配后一位字符,若不相等,则返回到str的前一次匹配位置的后一位,接着与sub的起始位进行匹配,直到与sub全...
2019-02-17 20:21:58
593
原创 Java初体验(4)之Arrays常用操作
排序1、sort(数组名)按照升序进行数组排序。源码如下:2、sort(数组名,起始索引,结束索引)排序数组内容包括起始下标,不包括结束下标,半开半闭。源码如下:判断两数组是否相等equals(数组名1,数组名2)(布尔类型)判断两个数组是否相等,结果为true或false。如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。如果两个数组引用均为null,则默认相等源...
2018-11-15 22:14:51
408
原创 Java初体验(3)之数组拷贝方法
四种拷贝方法简单类型拷贝前后,改变拷贝者数值,原件数值不变;引用类型拷贝前后,改变拷贝者数值,原件数值变化(连同原件地址改变)引用类型的堆栈分析1、for 浅拷贝int [] a=new int[]{1,2}int [] b=new int[2];for(int i=0;i&amp;lt;a.length;i++) { b[i]=a[i]; }2、clone ...
2018-11-14 19:18:36
114
原创 习题整理集(2)
1、水仙花数public class ShuiXianHua { public static void main(String[] arge) { int num,a,b,c; for ( num = 100 ; num < 1000 ; num ++){ a = num / 100; b = (...
2018-11-09 12:55:52
193
原创 习题整理集(1)
1、1到n的加法(for循环)public static int sumN(int n) { int sum = 0; int i = 0; for ( i = 0;i &lt;= n ; i ++) { sum += i;//循环加 } return sum; } publi...
2018-11-09 12:43:53
252
原创 Java初体验(2)之数据类型、运算、基本结构语句......
一、 数据类型Java是强类型(strongly typed)语言,即每个变量和对象都必须具有声明类型,这样编译时就可以确定变量的类型,从而通过编译器避免许多错误。Java数据类型分为简单类型和引用类型,如下图所示:二、变量和常量变量是Java程序中的基本存储单元,它的定义包括变量名、变量类型和作用域几个部分。一般约定变量名是以小写字母开头的,而类名是以大写字母开头。如果包含多个单词,...
2018-11-07 21:33:26
153
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人