摘要: CopyOnWriteArrayList是一个在多线程操作中线程安全的ArrayList的一个变种,她在所有对ArrayList对象的编辑操作(add,set等)都会复制一份副本,因此无论是对ArrayList操作还是对其iterator操作都不会抛ConcurrentModificationExc 阅读全文
posted @ 2017-08-01 10:24 星、落 阅读(1351) 评论(0) 推荐(0) 编辑
摘要: String类内部维护了一个char[]类型的value用来存储字符串,相对来说源码较为简单些。 String的不可变主要体现在三个方面: String类被定义为final类型,不可被继承 String中的value[]被定义为final String中的所有生成新的String的操作底层都调用Ar 阅读全文
posted @ 2017-06-28 13:33 星、落 阅读(375) 评论(0) 推荐(0) 编辑
摘要: DelayedWorkQueue: DelayedWorkQueue实现了BlockingQueue接口,因此其可以作为线程池的任务队列。BlockingQueue的主要属性有以下几个: private RunnableScheduledFuture[] queue:作为最小堆的实现数组,主要存储S 阅读全文
posted @ 2016-07-18 19:37 星、落 阅读(175) 评论(0) 推荐(0) 编辑
摘要: Java中ScheduleThreadPoolExecutor主要用于执行延迟任务或者按照一定的频率执行任务。其中scheduleAtFixedRate函数是按照一定频率执行任务,scheduleWithFixedDelay可以根据延迟一定时间再执行任务。本文将参考ScheduleThreadPoo 阅读全文
posted @ 2016-07-18 11:10 星、落 阅读(590) 评论(0) 推荐(0) 编辑
摘要: 我们都知道,对二叉树进行递归遍历非常简单,但递归算法需要额外的栈机制来存储每次递归的值。既然递归算法内部使用栈实现的,那么我们也可以借助于栈来实现二叉树的非递归遍历。下面我们将讲解利用非递归实现二叉树的前序、中序和后序遍历。1、非递归二叉树前序遍历:我们知道,二叉树的前序遍历对节点的访问顺序是根节点... 阅读全文
posted @ 2015-01-11 10:41 星、落 阅读(395) 评论(0) 推荐(0) 编辑
摘要: 对于全排列问题,假设我们有n个不同的数字,需要对其进行全排列,那么全排列的总数为f(n),f(n) = n * f(n - 1)。我们可以看做是将第一个数字固定,然后对后边n-1个数字进行全排,这样第一个数字就有n种选择。同理,在求f(n - 1)时,可以看做第二个数字固定,后边n-2个数字进行... 阅读全文
posted @ 2015-01-10 23:47 星、落 阅读(259) 评论(0) 推荐(0) 编辑