转载

java数据结构(一) 数组array

数组最好写得支持泛型

public class Array<T> {

#T是自己自定义的一个类型
          }

java不支持直接new一个泛型,必须先new一个Object,然后前面进行 类型转换

data = (E[]) new Object[capacity]

动态数组:扩容部分

if size == length :

resize(2*data.length);

private void resize(int newcapacity) {

E[] newData = (E[]) new Object[newcapacity];
for(int i=0;i<size;i++) {
    newdata[i] = data[i];
    }
data  = newdata

复杂度震荡问题:本来removelast,和addlast操作,均摊的时间复杂度是O(n),但是如果操作到了需要扩容或缩容的元素,频繁的进行,removelast,然后又addlast,这样一直是O(n)

出现这样问题的原因呢:我们添加和删除时候的扩容太激进了,(too eager),应该元素个数变成总容量1/4的时候,我们只缩容到容量的一半,而不是过于激进,直接缩容到1/4

原文  https://segmentfault.com/a/1190000019542598
正文到此结束
Loading...