StringBuilder和StringBuffer
层次结构StringBuffer
StringBuilder
StringBufferStringBuffer 是一个线程安全类,它对append()方法做了synchronized处理。
在AbstractStringBuilder中:
12345678910public AbstractStringBuilder append(String str){ if(str == null) return appendNull(); int len = str.length(); ensureCapacityInternal(count + len); str.getChars(0, len, value. count); count += len; return this;}
StringBuffer和StringBuilder均为AbstractStringBuilder类的实现,我们可以看到方法中执行两个步骤:
对追加后的字符串进行长度预判断(此时未将str添加到原对象中),如果现存的value[]长度不满足追 ...
排序算法
常用排序算法比较
排序方法
平均时间复杂度
最坏时间复杂度
最好时间复杂度
空间复杂度
稳定性
复杂性
插入排序
O(n2)
O(n2)
O(n)
O(1)
稳定
简单
希尔排序
O(n1.3)
O(1)
不稳定
较复杂
冒泡排序
O(n2)
O(n2)
O(n)
O(1)
稳定
简单
快速排序
O(nlog2n)
O(n2)
O(nlog2n)
O(log2n)
不稳定
较复杂
选择排序
O(n2)
O(n2)
O(n2)
O(1)
不稳定
简单
堆排序
O(nlog2n)
O(nlog2n)
O(nlog2n)
O(1)
不稳定
较复杂
归并排序
O(nlog2n)
O(nlog2n)
O(nlog2n)
O(n)
稳定
较复杂
基数排序
O(d(n+r))
O(d(n+r))
O(d(n+r))
O(r)
稳定
较复杂
堆排序堆排序(Heapsort)是利用堆这种数据结构所设计的一种排序算法
基本步骤:
首先将数组构建成一个小顶堆(或大顶堆)
从堆顶nums[0]取出最小值(或最大值)放到数组后端nums[n]处,然后将num ...