Collection子接口之一:List接口

本文详细介绍了Java中的List接口,作为数组的替代品,List集合类的特点是元素有序且可重复。重点对比了ArrayList、LinkedList和Vector三个主要实现类的异同,包括它们的线程安全、存储结构以及扩容策略。ArrayList在JDK1.7和1.8中的底层实现有所区别,而LinkedList使用双向链表存储,适合频繁的插入和删除操作。此外,还展示了ArrayList中remove()方法的使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#Collection子接口之一:List接口

List接口概述

  • 鉴于Java中数组用来存储数据的局限性,我们通常使用List替代数组

  • List集合类中元素有序、且可重复,集合中的每个元素都有其对应的顺序索引。

  • List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。

  • JDK API中List接口的实现类常用的有:ArrayList、LinkedList和Vector。

  • ArrayList、LinkedList和Vector三种异同

    • 相同点

      三个类都实现了List接口,存储数据的特点相同:有序的,可重复的数据

    • 不同点

      1. ArrayList
        • 线程不安全,效率高
        • 底层使用Object[] elementData存储
      2. Vector
        • 线程安全,效率高
        • 底层使用Object[] elementData存储
      3. LinkedList
        • 线程不安全,效率高
        • 底层使用双向链表存储
        • 对于频繁的插入,删除操作效率比ArrayList高

##List实现类之一:ArrayList底层实现

  1. JDK1.7

    • 底层使用数组实现,底层创建了一个长度为10的Object[]类型的数组 elementData
    • list.add(111):elementData[0]=new Integer(123)
    • 当添加的元素导致elementData[]数组的容量不够了之后,则扩容,默认情况下,扩容为原来的容量的1.5倍,同时需要将原来数组中的元素拷贝到扩容后的数组中
  2. JDK1.8

    • 实例化List对象的时候,底层创建了一个Object[]类型的数组 elementData{},没有设置长度
    • 第一次添加元素的时候,底层才会创建一个长度为10的数组,并将元素添加到elementData{}中
    • 扩容方式和JKD1.7相同
  3. JDK1.7中ArrayList对象的创建类似单例的饿汉模式,而JKD1.8中ArrayList对象的创建类似单例的懒汉模式

  4. List实现类之二:LinkedList底层实现

    • 底层通过双向链表实现
  5. **List **实现类之三:Vector底层实现

    • 底层和ArrayList差不多,只是扩容的时候是原来的两倍
  6. ArrayList中remove()方法的案例

    代码如下:

    @Test
    public void testListRemove() {
    List list = new ArrayList();
    list.add(1);
    list.add(2);
    list.add(3);
    updateList(list);
    System.out.println(list);//
    }
    private static void updateList(List list) {
    list.remove(2);
    }
    //结果是删除元素3
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值