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

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

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

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

Java集合主要分为两个体系结构,Collection和Map。这篇博客主要介绍Collection子接口List下的三个经常使用的实现类:ArrayList、Vector和LinkedList。

详细内容参见《Java基础——集合》

先看下关系图:

这里写图片描述

这是List最常用的实现类,想一想为什么他最常用?

Array,在java中意为“数组”。猜想ArrayList和数组应该关系很密切,其实ArrayList可以看作是一个可以改变大小的数组。

举个简单的例子吧,看下他的使用:

       ArrayList<String> list1 = new ArrayList<>();
        list1.add("a");
        list1.add("b");
        list1.add("c");
        list1.set(2, "d");
        Iterator<String> iter = list1.iterator();
        while (iter.hasNext()) {
            System.out.println(iter.next());
        }

之后,我们就从源码看看他是如何设计的吧。

1)构造函数

提示:

默认ArrayList长度为10;

用于保存数据的elementData本身就是个Object[];

ArrayList提供了三种构造函数,具体逻辑可以看下面的代码。

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

   //默认容量为10
    private static final int DEFAULT_CAPACITY = 10;

    private static final Object[] EMPTY_ELEMENTDATA = {};

    //调用无参数构造函数时,给一个空数据
    private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

   //保存元素的数据
    transient Object[] elementData; 

    //1、无参数构造函数,默认空数组
     public ArrayList() {
        this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
    }
    //2、给定初始容量的构造函数
     public ArrayList(int initialCapacity) {
        //大于0时,创建一个Object数据,长度为传入的容量值
        if (initialCapacity > 0) {
            this.elementData = new Object[initialCapacity];
        } else if (initialCapacity == 0) {
            //等于0时,给一个空数组
            this.elementData = EMPTY_ELEMENTDATA;
        } else {
            //其他抛出容量不合法异常
            throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
        }
    }

    //3、给定集合对象的构造函数
     public ArrayList(Collection<? extends E> c) {
        //放入数组
        elementData = c.toArray();
        //数组长度不等于0时,将进行复制
        if ((size = elementData.length) != 0) {
            // c.toArray might (incorrectly) not return Object[] (see 6260652)
            if (elementData.getClass() != Object[].class)
                elementData = Arrays.copyOf(elementData, size, Object[].class);
        } else {
            否则,返回空数组
            this.elementData = EMPTY_ELEMENTDATA;
        }
    }


}


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

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

    • 宋雯
      宋雯

      即通过革命搞垮那些不合作的中东国家

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