b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

双向循环链表 深入理解ArrayList、Vector和LinkedLis(2)

电脑杂谈  发布时间:2018-02-17 07:04:58  来源:网络整理

2)动态扩充

在添加元素时,会涉及到扩充的问题,其中核心方法是grow()。

提示:

双向循环链表的创建_双向链表为空的条件_双向循环链表

“>>” 右移运算符:

在二进制中比较容易理解,这里不是重点,大致相当于值的二分之一。因此,有的书上会说ArrayList扩容一次会增加原来的一半,就是从这里看出来的。双向循环链表

 private void grow(int minCapacity) {
        //获取原来的容量,即原来数组的长度
        int oldCapacity = elementData.length;
       //新容量
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
       //复制数组
        elementData = Arrays.copyOf(elementData, newCapacity);
    }

Vector和ArrayList几乎完全相同,直接看源码就知道了,瞬间有种剽窃的赶脚……

但其实不是的,Vector是比ArrayList出现的要早的,也正是因为这样,很多方法都比较陈旧了,并不推荐适用男。

这里贴了一小部分代码,和ArrayList几乎一样,就不占用空间了,有兴趣可以去java.util.Vector里面翻一翻。

public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable {

   protected Object[] elementData;
   protected int elementCount;
   public Vector() {
        this(10);
    }
   public Vector(int initialCapacity, int capacityIncrement) {
        super();
        if (initialCapacity < 0)
            throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
        this.elementData = new Object[initialCapacity];
        this.capacityIncrement = capacityIncrement;
    }

当然Vector也有一些自己的特点,随便拿几个方法来看看。他的方法中几乎都用到了synchronized关键字,开销会比较大,而且运行会比较慢。

 public synchronized void copyInto(Object[] anArray) {
        System.arraycopy(elementData, 0, anArray, 0, elementCount);
    }
     public synchronized void setSize(int newSize) {
     }
      public synchronized int capacity() {
        return elementData.length;
    }
    //数组个数
      public synchronized int size() {
        return elementCount;
    }
    //获取元素
    public Enumeration<E> elements() {
        return new Enumeration<E>() {
            int count = 0;

            public boolean hasMoreElements() {
                return count < elementCount;
            }

            public E nextElement() {
                synchronized (Vector.this) {
                    if (count < elementCount) {
                        return elementData(count++);
                    }
                }
                throw new NoSuchElementException("Vector Enumeration");
            }
        };
    }


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-81650-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...