- 博客(19)
- 收藏
- 关注
原创 Java多线程学习四
Wait和Notifywait:让线程进入等待状态。notify: 唤醒线程,使线程不在处于等待状态。当线程A运行的过程中遇到不满足的条件需要等待,等待线程B去更改系统的状态,当线程B改变了系统的状态,再次唤醒线程A,线程A查看是否满足条件,如果满足条件则继续执行,如果不满足条件则进入等待状态。面试题:wait和sleep有什么区别?1.sleep必须指定时间,wait可以指定也可以不指...
2019-08-01 22:37:29
248
原创 Java多线程学习三
线程安全1.同步代码块线程安全:《Java 并发实践》多个线程,访问一个类的对象,如果不考虑这些线程在运行环境下的调度和交替执行,并且不需要额外同步和调用方法,也不需要额外的代码块的协调,那么这个类仍是正确的。那么这个类就是线程安全的类。实例:public class SafeThread{ public static void main(String[] args) { new S...
2019-07-31 23:24:28
192
原创 Java多线程学习二
线程的生命周期当线程被创建并且启动后,它经历了五种状态,新建,就绪,运行,阻塞,死亡,当线程在运行的时候不能一直占有CPU的执行权,CPU会在每个线程之间进行调度,线程也会多次进行阻塞和运行状态的切换。1.当线程对象被创建出来就进入到了新建状态,和其他的Java对象一样,仅仅是由Java虚拟机为其分配内存。2.调用start方法后,线程进入到就绪状态,其实内部还是依赖jvm的调度,当jvm执...
2019-07-30 22:36:22
215
原创 Java多线程学习(一)
线程概述:Java提供了非常优秀的多线程的支持,程序可以通过非常简单的方式启动多线程,多线程包括创建,启动线程,控制线程,以及多线程的同步(多线程安全)。线程和进程的区别:几乎所有的操作系统都支持进程的概念,所有运行的任务通常对应一个进程,当程序进入到内存中,即变成一个进程。进程是处于运行中的程序,并具有一定的独立性。进程是包含线程的,也就是说一个进程可以包含多个线程。进程具有如下的特性:...
2019-07-30 08:50:30
169
原创 Java算法——排序算法(归并排序)
归并排序各种排序算法比较:归并排序(Merge Sort):和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多。因为时间复杂度始终为O(nlogn),代价是需要占用额外的内存空间。归并排序是建立在归并操作上的一种有效算法。该算法是一个采用分治法(Divide and Conquer)非常典型的应用,归并排序是一种稳定的排序方法,将已有序的子序列合并,得到完全有序的序...
2019-07-25 20:39:27
225
原创 Java算法学习——排序算法(直接插入排序,希尔排序)
排序算法第三篇先放排序算法比较表:直接插入排序(Insertion Sort):正如这个排序算法的名字,这是一个简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后往前扫描,找到相应的位置并插入。算法描述:步骤一:从第一个元素开始,该元素可以被认为是已排序元素。步骤二:取出下一个元素,在已排序的元素中从后往前扫描,如果该元素大于新元素则往后移一位,直...
2019-07-24 23:48:00
310
原创 Java算法学习——排序算法(简单选择排序,堆排序)
接上一篇文章我们依旧把各排序算法的比较图放出来:1.简单选择排序(Selection Sort):简单选择排序,最稳定的排序算法之一,无论什么数据进去时间复杂度都是O(n2)。由于时间复杂度较高,所以适用于小规模的数据。它的好处就在于不占用额外的内存空间。简单选择排序是一种简单直观的排序算法。它的工作原理是:先在未排序的序列中找到最大(小)元素,存放到排序序列的起始位置。然后再从剩余未排...
2019-07-24 19:51:24
209
原创 Java算法学习——排序算法(冒泡排序,快速排序)
排序算法定义:对一序列对象根据某个关键字进行排序。衡量排序算法的指标:时间复杂度:一个算法执行所耗费的时间。空间复杂度:运行完一个程序所需内存的大小。稳定性:如果一个序列中有两个相等的对象(A=B),此时A排在B前面,排序之后A仍在B的前面,则该排序算法稳定。反之,则不稳定。内排序:所有排序操作都在内存中完成。外排序:由于数据太大,因此把数据放到磁盘里,而排序需要通过内存和磁盘的数...
2019-07-23 18:49:32
304
原创 java算法学习——调整整数数组的顺序,使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。首先我们先分析一下题干,奇数和奇数之间,偶数和偶数之间的相对位置不变,所以要保证排序具有稳定性,而具有稳定性的排序有:插入,归并,冒泡排序,这是我们可以可以采用的排序方法。而快速排序和选择排序是不稳定的,所以不能用这两种方法来排序...
2019-07-06 18:16:22
674
原创 Java算法学习——快速幂
快速幂快速幂:顾名思义就是快速的求一个数的n次幂。例如:an,直接的算法就是累乘,这样的计算方法时间复杂度为O(n)。而快速幂可以降低时间复杂度至O(log(n))。那么快速幂是如何降低时间复杂度的呢?接下来我举个例子,如果我们要求an,实数n满足2K,那么an可以表示为((a2)2)2…的形式,而普通算法则为a* a *a…的形式。因此快速幂只要进行K次平方运算就可以得到最终结果。时间复杂...
2019-07-04 23:49:53
564
原创 原码,反码,补码详解及如何计算二进制数中1的数量
原码、反码、补码的定义我们都知道计算机无法直接识别十进制数,所以我们要先把十进制数转换成二进制数存在内存中才能进行相应的计算。而原码,反码,补码就是计算机储存一个具体数字的编码方式。原码:原码就是符号位加上真值的绝对值,即第一位是符号位,其余位表示值。反码:正数的反码是其本身,负数的反码是在其原码的基础上,符号位不变,其余各个位取反。补码:正数的补码是它本身,负数的补码是在其原码的基础上,...
2019-07-02 21:02:10
1745
1
原创 斐波那契数列的递归和迭代实现
递归和迭代的区别递归:递归就是在函数里面调用自身。递归主要可以分为两个过程:递推和回归。所谓递推就是把复杂的问题求解推到比原来问题简单的一些问题的求解。回归就是当获得最简单的问题后,逐步返回,依次得到复杂问题的解。迭代:迭代就是利用变量的原值推算出变量的一个新值。斐波那契数列的递归和迭代实现递归实现:public class Solution { public int Fibon...
2019-06-30 18:31:11
875
原创 优胜劣汰,WiFi会被5G淘汰吗?
关于5G时代早在前两年就有一些专家说过,未来5G将会取代wifi,成为新时代的宠儿。但也有一些人认为5G不可能取代wifi,两者会保持一种相互合作,相互竞争的关系。相比之下,我更同意第二种说法。为什么这么说呢?请客官往下看:1、5G频段,带宽问题我们都知道前不久国家工信部给各大运营商颁发了5G牌照,这意味着他们可以开始部署5G基础设备,进行提供5G服务的实验了。根据国家工信部的安排,中国移...
2019-06-29 20:24:07
344
原创 非递减排序及旋转数组实例
四种序列的简单区别递增排列:1,2,3,4,5递减排列 :5,4,3,2,1非递减排列 :1,2,3,3,4,5非递增排列:6,5,5,4,4,3,2,1实例把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出...
2019-06-17 01:51:40
1449
原创 队列和栈的简介及其应用实例
Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构java中stack的使用方法,堆栈是一种"后进先出"(LIFO)的数据结构,只能在一端进行插入(称为"压栈")或删除(称为"出栈")数据的操作....
2019-06-16 19:20:36
3701
原创 JAVA二叉树前序,中序,后序遍历及使用递归还原二叉树
二叉树的前序,中序,后序遍历规则Tree Traversals:前序遍历(preorder):根节点–>左子树–>右子树中序遍历(inorder):左子树–>根节点–>右子树后续遍历(postorder):左子树–>右子树–>根节点Tips:这里我把对应的英文写出来,大家可以在命名变量的时候使用现在我们举一个实例供大家理解:前序遍历:a–>...
2019-06-15 23:29:28
1359
2
转载 关于Java链表的从尾到头的输出实例
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。这是之前我在某网上看到一道题目,在看各路大神解析时,看到一位大佬给出递归神级使用,心生澎湃跟各位分享一下。/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {...
2019-06-13 00:46:13
319
原创 JAVA中String, StringBuffer, StringBuilder的使用方法和区别
String, StringBuffer, StringBuilder简介及区别String:字符串常量StringBuffer:字符串变量(线程安全)StringBuilder:字符串变量(非线程安全)通过上述的描述想必大家已经对这三个对象有了一定了解。String:String类型的字符串是不可以发生改变的对象。如果对String类型的字符串进行更改的话,会生成一个新的对象,这个字...
2019-06-12 22:55:39
336
原创 Java中二维数组array.length和array[i].length的区别及实例
Java中二维数组array.length和array[i].length的区别及实例这两个length其实很容易区分。array.length代表的是二维数组行的长度,也可以看成每个二维数组中所包含的数组的数量。array[i].length代表的是对应行的长度。实例分析在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请...
2019-06-11 01:20:41
8296
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅