Java集合-List

95 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情

大家好,我是尚影嫣🌷,一名Java后端程序媛。如果您喜欢我的文章,欢迎点赞➕关注❤️,让我们成为更好的我们~🥰

List

List接口继承Collection接口,只能单值存储。

List是存储重复元素的集合,所有元素以线性方式进行存储,可以通过索引来访问集合中指定的元素。List集合中元素的存储顺序和取出顺序一致。

List在Collection接口的基础上,增加了一些根据元素位置索引来操作集合的特有方法。

集合不能定义为基本数据类型(int、char、float等),应该定义为包装类数据类型(Integer、String等)。

ArrayList集合和LinkedList集合的区别:

1、ArrayList集合底层是数组,而且是Object[] 类型;而LinkedList集合底层是链表。

2、ArrayList集合查询数据很快,但是增删数据很慢;LinkedList集合增删数据很快。但是查询数据很慢。

ArrayList 在实例化时会构造一个初始容量为10的空列表,会自动扩容1.5倍。

ArrayList(int initialCapacity) 是指定容量的构造函数。

调用无参构造方法进行初始化时,会创建一个长度为0的数组,当调用add( ) 方法时会判断够不够存,如果不够会自动扩容1.5倍,一直扩到够存为止。所以如果要存的数据量很大时,最好调用指定容量的参构造方法,使其容量能一次到位。

在调用ArrayList的add()方法时,都会返回true。源码如下👇

public boolean add(E e) {
    ensureCapacityInternal(size + 1);  // Increments modCount!!
    elementData[size++] = e;
    return true;
}

private void ensureCapacityInternal(int minCapacity) {
    if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
        // 取默认长度和最小长度的最大值
        minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
    }

    ensureExplicitCapacity(minCapacity);
}

private void ensureExplicitCapacity(int minCapacity) {
    modCount++;

    // overflow-conscious code
    if (minCapacity - elementData.length > 0)
        grow(minCapacity);
}

Vector和ArrayList很类似,但是线程安全。