摘要:
一、引言二、java重要的函数式接口1、什么是函数式接口1.1 java8自带的常用函数式接口。1.2 惰性求值与及早求值2、常用的流2.1 collect(Collectors.toList())2.2 filter2.3 map2.4 flatMap2.5 max和min2.6 count2.7 阅读全文
摘要:
一、序列化的含义、意义及使用场景二、序列化实现的方式1、Serializable1.1 普通序列化1.2 成员是引用的序列化1.3 同一对象序列化多次的机制1.4 java序列化算法潜在的问题1.5 可选的自定义序列化2、Externalizable:强制自定义序列化3、两种序列化对比三、序列化版本 阅读全文
摘要:
一、引言 也许大家在使用流时因为未关闭、或者未正常关闭引发了很多问题。其实java7引入了自动关闭流机制,只是我们未使用而已。 二、自动关闭流例子 public class AutoCloseTest { public&nb 阅读全文
摘要:
一、引言 顾名思义,快速排序是实践中的一种快速排序算法,在C++或对Java基础类型的排序中特别有用。它的平均运行时间是O(NlogN);但最坏情形性能为O(N2)。我会先介绍快速排序过程,再讨论如何优化。 二、快速排序(quicksort) 算法思想: 采用分治法,将数组分为两部分,并递归调用。将 阅读全文
摘要:
一、引言 我们知道,java中泛型排序使用归并排序或TimSort。归并排序以O(NlogN)最坏时间运行,下面我们分析归并排序过程及分析证明时间复杂度;也会简述为什么java选择归并排序作为泛型的排序算法。 二、图解归并排序过程 算法思想:采用分治法: 分割:递归地把当前序列平均分割成两半。 集成 阅读全文
摘要:
一、引言二、图解堆排序(heapsort)三、java代码实现及时间复杂度分析四、总结 一、引言 优先队列可以用于以O(NlogN)时间排序,正如上一篇的求解topK问题中用到的思想一样,这种思想就是堆排序(heapsort)。 二、图解堆排序(heapsort) 算法思想:通过将数组元素进行bui 阅读全文
摘要:
在原来基础上增加了算法E。 一、引言 这就是类似求Top(K)问题,什么意思呢?怎么在无序数组中找到第几(K)大元素?我们这里不考虑海量数据,能装入内存。 二、普通算法 算法A: 将数组中的元素升序排序,找到数组下标k 1的元素即可。这是大家最容易想到的方法,如果使用简单排序算法,时间复杂度为O 阅读全文
摘要:
一、队列与优先队列的区别 队列是一种FIFO(First In First Out)先进先出的数据结构,对应于生活中的排队的场景,排在前面的人总是先通过,依次进行。 优先队列是特殊的队列,从“优先”一词,可看出有“插队现象”。比如在火车站排队进站时,就会有些比较急的人来插队,他们就在前面先通过验票。 阅读全文
摘要:
引言: 前面详解了如何优化冒泡排序?,图解选择排序与插入排序,这些简单排序算法平均时间复杂度都是O(n^2)。希尔排序是第一批打破二次时间屏障的算法之一。下面我们来分析为什么希尔排序可以打破二次时间复杂度。 一、分析简单排序算法的下界 逆序:具有性质i < j但 a[i] > a[j]的 阅读全文
摘要:
上一篇详述了冒泡排序及其优化,有兴趣的可以看看: 如何优化冒泡排序? 一、选择排序(SelectionSort) 算法思想:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 阅读全文