Java Collection 之List接口概述及常用方法

本文深入介绍了Java中的List接口及其三个主要实现类:ArrayList、LinkedList和Vector。对比了它们的底层数据结构、特性以及应用场景,并提供了实用示例。

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

一.List接口概述

  • 在List接口中值可重复

  • 含有三个常用的实现类:

    • ArrayList

    • LinkedList

    • Vector

  • List接口中含有索引值,因此含有get()方法,可以获取属性

二.List常用类及方法介绍

1.ArrayList实现类

  • 底层为数组结构,因此在ArrayList中查询快,但是添加/删除时需要移动大量元素,效率低

  • 继承自AbctractList,实现了List接口

  • 允许null存在

  • 同时还实现了Random,Cloneable,Serizlizable接口,因此支持快捷访问,克隆,序列化

成员变量

private int size;
transient Object[] elementDate;

注:

这里的size是指elementDate中实际有多少个元素,而elementDate.length为集合容量,表示最多可以容纳多少个元素

构造方法

①ArrayList< > ( );

//默认无参构造方法,创建一个长度为10的底层数组,第一次添加元素时,真正添加到里面

ArrayList<String> alist = new ArrayList();

②ArrayList< >(20);

//指定长度

ArrayList<String> alist = new ArrayList(20);

常用方法

        //向指定位置添加元素
        alist.add(0,"d");
        System.out.println(alist);
        
        //获取指定索引元素
        System.out.println(alist.get(2));
        
        //返回指定元素第一次出现的位置
        int a = alist.indexOf("b");
        System.out.println(a);
        
        //删除指定位置元素,并返回元素
        System.out.println(alist.remove(1));
        
        //替换指定位置元素
        System.out.println(alist.set(1,"B"));
  • removeRange()方法;

//删除指定区间元素

//是一个用protected修饰的受保护方法,因此使用时不能直接调用,需用子类继承父类ArrayList,才可以使用

import java.util.ArrayList;
​
public class MyArrayList extends ArrayList {
​
    public static void main(String[] args) {
​
        /*
          removeRange()为受保护的方法,需用子类继承父类再进行调用
         */
        MyArrayList myArrayList = new MyArrayList();
        myArrayList.removeRange(0,3);   //删除指定区间的元素
    }
}
  • sort()方法

//对集合中的元素进行排序

import java.util.ArrayList;
import java.util.Comparator;
​
public class ArrayListDemo3 {
​
    public static void main(String[] args) {
​
        ArrayList <String> a = new ArrayList();
                  a.add("a");
                  a.add("f");
                  a.add("c");
                  a.add("b");
​
                  //new接口(){方法重写}  创建了一个匿名内部类对象
                  a.sort(new Comparator<String>() {
                      @Override
                      public int compare(String o1, String o2) {
                          return o1.compareTo(o2);
                      }
                  });
                  //创建一个自定义String比较器类的对象
                 // a.sort(new StringComparator());
        System.out.println(a);          
    }
}

2.LinkedList实现类

  • 底层为双向链表结构,双向链表的每个节点用内部类Node表示.LinkedList通过first和last引用分别指向链表的第一个和最后一个元素.当链表为空时first和last都指向null

  • 使用LinkedList查询元素较慢,但删除和添加元素效率高

  • 继承自AbstractSequentialList,同时实现了List和Deque接口

私有内部类Node

private static class Node<E>{
     E    item;
     Node<E>  next;
     Node<E>  prev;
}

构造方法

①LinkedList< > ( )

//无参构造方法

LinkedList l = new LinkedList();

常用方法

  l.add("a");   //向集合中添加元素,每添加一个,创建一个Node对象
  
  l.get(2);   //获取指定位置的元素
  //方法类似二分查找,判断index < (size/2),如果大于,则从头开始查找,否则从结尾开始查找,节省效率

3.Vector实现类

  • 底层也为数组实现

  • 是线程安全的

构造方法

①Vector()

//构造一个空向量,其内部数组的大小默认为10

②Vector(Collection c)

//构造一个包含指定collection中的元素的向量,这些元素按其collection的迭代器返回元素的顺序排序

三.List小面试题

package collection.list.arraylist;
/*
   区分list中 remove(int index) 和  remove(Object obj)
 */
import java.util.ArrayList;
import java.util.List;
​
public class ListTest {
​
    public static void main(String[] args) {
​
        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",而非"2"
        list.remove(new Integer(2));   //将数字"2"装箱,则删除的为数字"2"
    }
}
​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会写代码的菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值