java数据结构之ArryList,LinkList,List

 

ArrayList内部是一个数组,和计数的size变量,以及一系列辅助他增加容量大小的属性。

初始默认的大小是空。后续添加时,原来是空的情况下,就一次扩DEFAULT_CAPACITY = 10 个大小,如果不是空的,那么就按照一定规则进行扩容。

删除元素时并不会缩小数组的大小,需要通过用trimToSize()这个方法来将数组缩到size大小

 private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);//大小涨到n+n/2
        if (newCapacity - minCapacity < 0)//如果涨了之后达不到要求的大小,就需要多大是多大
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)//如果涨了之后的大小超过了最大容量Integer.MAX_VALUE - 8,就判断一下是否为负数或变成Integer.MAX_VALUE
            newCapacity = hugeCapacity(minCapacity);
        // minCapacity is usually close to size, so this is a win:
        elementData = Arrays.copyOf(elementData, newCapacity);//最后使用数组的方法扩容
    }
public void trimToSize() {
        modCount++;
        if (size < elementData.length) {
            elementData = (size == 0)
              ? EMPTY_ELEMENTDATA
              : Arrays.copyOf(elementData, size);
        }
    }

LinkList是一个包涵size,first结点,last结点的结构,每一个节点都保存着当前的值,前一个结点和后一个结点。实现大致与链表无异。

List则是一个声明一些表结构基本功能的接口。

Vector实现的也是动态数组,但其与ArrayList的不同之处在于,他是线程安全的(在对数组进行操作的方法上都加了synchronized),他也可以控制对数组扩容的大小。

补充:

  1. ArratList和数组的区别?

    数组是定长的,ArrayList变长,但在支持扩容的同时对效率影响很大

  2. default关键字

又称friendly()声明时没有加修饰符默认是friendly,且此关键字使得该方法在包内可见,同一包中的类都可以访问这个方法。

 

在接口方法前添加这个关键字可以使得这个接口的实现不必重写此方法也能好使。

Ps:接口中方法默认访问权限是public,类中方法默认访问权限是default

3. Transient关键字

在变量前加入此关键字可防止变量被序列化,一般用于较敏感的数据前使用。百度安全验证

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值