摘要: 概要 线程间的通信是用volatile和synchronized两个关键字实现同步完成的线程间的通信;但是在JAVA中的线程之间的通信其实就是共享内存,当一个变量被volatile修饰或者被同步块包括时,那么线程的操作会实时更新到共享内存,然后各个线程都会知道最新变量的值,也就是内存的可见性;看起来 阅读全文
posted @ 2018-09-21 10:01 轻抚丶两袖风尘 阅读(4327) 评论(0) 推荐(0) 编辑
摘要: 线程的状态 线程的状态总共分有:初始态、运行态、等待态、超时等待态、阻塞态、终止态。 初始态 由Thread创建对象,还没有使用start启动线程,称为初始态。 就绪状态 在JAVA中的就绪状态分为:就绪状态和运行状态。 就绪状态:指线程获得运行的所有资源,只需要等待CPU分配执行权就可以立即运行。 阅读全文
posted @ 2018-09-18 10:37 轻抚丶两袖风尘 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 概要 并发编程的关键性问题 通信与同步 并发就是让多个线程同时执行,若线程之间是相互独立的,那么并发也比较简单,各自执行各自的;但是当多个线程之间需要共享数据,此时在并发编程中就必须考虑两个问题,就是通信和同步。 通信:通信指消息在线程之间的传递;既然要传递消息,那么接受线程和发送线程之间必须有一个 阅读全文
posted @ 2018-09-17 20:57 轻抚丶两袖风尘 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 什么是JAVA并发 java并发提高程序的执行速度,然而并不是多线程就一定比单线程高效,而且并发容易出错;若要实现正确并且高效的并发,那么要注意三个问题:上下文切换、死锁、资源限制。 上下文切换 上下文切换:当一条线程的时间片使用完成后,操作系统暂停线程该线程,保存他的状态信息,然后操作系统从线程堆 阅读全文
posted @ 2018-09-17 10:15 轻抚丶两袖风尘 阅读(121) 评论(0) 推荐(0) 编辑
摘要: 题目描述 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写)。 题目分析 这个题目很简单,我记得在学c语言的时候就玩过。 方法一:你可以定义一个256长度的int数组array,一个循环 array[s 阅读全文
posted @ 2018-09-12 15:20 轻抚丶两袖风尘 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 已经10天了,每天都坚持复习集合,看懂他们的源代码。我将List的ArrayList,Vector,Stack,和LinkedList。Map的HashMap,Hashtable,HashTree,和WeakHashMap都总结了,但是还有Set没有总结,继承于AbstractSet有HashSet 阅读全文
posted @ 2018-09-11 10:15 轻抚丶两袖风尘 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 概要 WeakHashMap是继承AbstractMap的,他存储的内容是一个key-value映射,是一个散列表,他的key值和value值和HashMap一样都可以为空。但是WeakHashMap是弱键。弱键指的是当WeakHashMap的某一个键值不在使用,将会自动被删除、回收。 弱键实现的原 阅读全文
posted @ 2018-09-11 09:26 轻抚丶两袖风尘 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 概要 源代码 这个的源代码巨多 1 package java.util; 2 3 public class TreeMap<K,V> 4 extends AbstractMap<K,V> 5 implements NavigableMap<K,V>, Cloneable, java.io.Seria 阅读全文
posted @ 2018-09-10 11:22 轻抚丶两袖风尘 阅读(393) 评论(0) 推荐(0) 编辑
摘要: 概要 源代码 学习java的时候看他的源代码是最好的,这样能够深刻的记住他的语法规则。 1 package java.util; 2 import java.io.*; 3 4 public class Hashtable<K,V> 5 extends Dictionary<K,V> 6 imple 阅读全文
posted @ 2018-09-10 10:03 轻抚丶两袖风尘 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 题目描述: 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 题目分析 1为丑数,后面的丑数是在1的基础上*2、*3、*5,所得的数,丑数=丑数*2或者*3或者*4。 阅读全文
posted @ 2018-09-09 17:34 轻抚丶两袖风尘 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 题目分析 刚开始我看到这个题,我就想到的是排序,在各种思路中越走越远,于是就小百度了一下;不过感觉从这个题获得的 阅读全文
posted @ 2018-09-09 16:23 轻抚丶两袖风尘 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 概要 HashMap是一个散列表,他存储的是key-value键值对。 HashMap是继承的是AbstractMap,实现了Map、Cloneable、java.io.serializable接口。 HashMap是不同步,那么说明了HashMap不是线程安全的,他的key、value可以为空(H 阅读全文
posted @ 2018-09-09 09:36 轻抚丶两袖风尘 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 题目分析 这个题是赤裸裸的排序,话不多说,排序方式很多,这个题我使用的是快速排序。 快速排序:将数组的第一个数值作为标记位,然后分别从前往后寻找到大于标记位的位置i, 阅读全文
posted @ 2018-09-08 17:02 轻抚丶两袖风尘 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 题目分析 这个题基于桶排序的思路改进的。 假如,我们使用一个数组array,将 阅读全文
posted @ 2018-09-08 16:34 轻抚丶两袖风尘 阅读(107) 评论(0) 推荐(0) 编辑
摘要: 题目描述 题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所 阅读全文
posted @ 2018-09-08 15:22 轻抚丶两袖风尘 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 概要 如上图 Map Map是一个Key-value的映射接口。Map不能包含重复的键;每个键最多只能映射到一个值。 Map提供三张Collection视图:键集,值集,键-值映射关系。 Map的有些实现类可以保证键值对的映射顺序,有些不能。 Map提供的返回值函数:entrySet:返回key-v 阅读全文
posted @ 2018-09-08 10:31 轻抚丶两袖风尘 阅读(1373) 评论(0) 推荐(0) 编辑
摘要: 概要 先上一张图:在图中我们知道他们具体继承之间的关系。 LinkedList是一个双向链表,但是也可以当做队列,栈。双端口队列使用,他的随机访问速率很低,但随机插入、删除效率是最高的。 ArrayList是一个动态数组,由于实现一个数组,他和LinkedList相反,随机访问速率很高,但是随机插入 阅读全文
posted @ 2018-09-08 09:32 轻抚丶两袖风尘 阅读(921) 评论(0) 推荐(0) 编辑
摘要: 题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 题目分析 这个题目也难住了我好长时间,然而这个题的关键就在于,二叉树的中序序列,总所周知:二叉搜索树的左节点小于根节点,右节点大于根节点;所以这个题目的要求换成一个排序的双向 阅读全文
posted @ 2018-09-07 17:19 轻抚丶两袖风尘 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)。 题目分析 ps:这个题很尴尬,刚开始我是用递归做,但是发现无论怎么样都没 阅读全文
posted @ 2018-09-07 16:18 轻抚丶两袖风尘 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 概要 Stack是栈,在数据结构中就已经知道,栈的属性是先进后出,操作也只有那么几个,一个是进栈,一个是出栈,还有个就是返回栈顶数据。 Stack继承于Vector(矢量队列),由于Vector是基于数组实现的,那么Stack也是基于数组实现,并不是基于链表。 Stack stack实际上也是通过数 阅读全文
posted @ 2018-09-07 10:44 轻抚丶两袖风尘 阅读(118) 评论(0) 推荐(0) 编辑