List集合接口

一、List 核心定义

List 是 Java 单列集合 Collection 的核心子接口,有序、可重复、支持索引,能精确控制元素插入位置与访问顺序,解决数组固定长度缺陷,提供灵活的元素操作能力。


二、List 核心特性

  1. 有序性:元素按插入顺序存储,遍历顺序与插入顺序一致;

  2. 可重复性:允许存储多个值相等的元素(无去重逻辑);

  3. 索引支持:通过整数索引(从 0 开始)直接访问、操作元素;

  4. 泛型支持:指定元素类型,避免类型转换错误,提升代码安全性;

  5. 动态扩容:无需手动指定长度,容量随元素增加自动调整。


三、常用实现类(3个核心类)

  1. ArrayList(最常用)

• 底层实现:动态数组(JDK8 无初始容量,首次添加元素初始化容量为 10,扩容时按 1.5 倍增长);

• 核心性能:查询、随机访问快(直接通过索引定位,时间复杂度 O(1)),增删慢(需移动数组元素,时间复杂度 O(n));

• 线程安全:非线程安全,多线程并发修改会抛 ConcurrentModificationException;

• 适用场景:查询频繁、增删操作少的场景(如数据展示、列表查询)。

  1. LinkedList

• 底层实现:双向链表(每个节点存储元素、前驱节点地址、后继节点地址);

• 核心性能:增删快(仅需修改节点指针,时间复杂度 O(1),首尾操作效率最优),查询慢(需遍历链表定位,时间复杂度 O(n));

• 线程安全:非线程安全;

• 额外能力:实现 Deque 接口,可作为队列(Queue)、双端队列使用,支持首尾快速操作;

• 适用场景:增删频繁、查询少的场景(如队列入队出队、链表结构业务)。


四、List 方法(含特有方法)

  1. 基础操作(继承自 Collection)

• 增:add(E e)(末尾加元素)、addAll(Collection<? extends E> c)(添加另一个集合所有元素);

• 删:remove(Object o)(删除首个匹配元素)、clear()(清空所有元素);

• 查:size()(返回元素个数)、contains(Object o)(判断是否含指定元素)、isEmpty()(判断是否为空);

• 遍历:、forEach

  1. 索引特有操作(List 专属,核心重点)

• 增:add(int index, E e)(在指定索引插入元素,后续元素后移);

• 查:get(int index)(获取指定索引元素,索引越界抛 IndexOutOfBoundsException);

• 删:remove(int index)(删除指定索引元素,后续元素前移);

• 定位:indexOf(Object o)(返回元素首次出现的索引,未找到返回 -1)、lastIndexOf(Object o)(返回元素末次出现的索引,未找到返回 -1);

• 截取:subList(int fromIndex, int toIndex)(截取 [fromIndex, toIndex) 区间的子 List,子 List 与原 List 共享底层数据,修改相互影响);

• 替换:set(int index, E e)(替换指定索引的元素,返回被替换的旧元素);

• 转数组:toArray(T[] a)(转为指定类型数组,推荐使用,避免类型转换)。


五、List 遍历方式(4种常用)

  1. 普通 for 循环(利用索引,仅 List 支持):

for (int i = 0; i < list.size(); i++) {

E element = list.get(i);

}

  1. 增强 for 循环(简洁,所有 Collection 通用):

for (E element : list) {

// 操作元素

}


六、代码

java 复制代码
package testlist;

import java.util.ArrayList;
import java.util.List;

public class TestList {
    public static  void main(String[] args) {
        //存储多个字符串:数字-》集合
        //List:有序,有下标,元素可以重复
        //1.创建集合元素
        List strs=new ArrayList();
        //往集合中添加元素
        strs.add("aa");
        strs.add("bb");
        strs.add("cc");
        strs.add("cc");
        strs.set(2,"cc");
        System.out.println("集合中元素的个数"+strs.size());
        System.out.println("根据下标获取对应的元素"+strs.get(2));
        //3.对集合元素进行遍历
        for(int i=0;i<strs.size();i++){

            System.out.println(strs.get(i));
        }
        System.out.println("-------将小写转为大写------");
        for(int i=0;i<strs.size();i++){
            Object s=strs.get(i);
            String obj=(String)s;
            System.out.println(obj.toUpperCase());
        }
    }
}
java 复制代码
package testlist;

import java.util.ArrayList;
import java.util.List;

public class TestList2 {
    public static void main(String[] args) {
        //泛型集合:强制约束集合中的数据
        List<String> nums=new ArrayList<String>();
        nums.add("aa");
        nums.add("bb");
        nums.add("cc");
        nums.add("aa");
        System.out.println("-------下标遍历--------");
        for(int i=0;i<nums.size();i++){
            String s=nums.get(i);
            System.out.println(s.toUpperCase());
        }
        System.out.println("-------forEach--遍历------");
        for(String s:nums) {

            System.out.println(s.toUpperCase());
        }
    }
}
java 复制代码
package testlist;

import java.util.ArrayList;
import java.util.List;

public class TestList3 {
    public static void main(String[] args) {
        //存储多个整数
        List<Integer> nums=new ArrayList<>();
        nums.add(89);
        nums.add(78);
        nums.add(35);
        for(Integer n:nums){
            System.out.println(n);
        }
        double sum=0;
        for(Integer a:nums){
            sum+=a;
        }
        System.out.println("平均值:"+sum/nums.size());
    }
}
相关推荐
源码获取_wx:Fegn08952 小时前
基于springboot + vue物业管理系统
java·开发语言·vue.js·spring boot·后端·spring·课程设计
cike_y2 小时前
JavaWeb-JDBC&事务回滚
java·开发语言·javaweb
青啊青斯2 小时前
python markdown转word【包括字体指定】
开发语言·python·word
corpse20102 小时前
trae下载依赖包特别慢!!!
开发语言·python
rainFFrain2 小时前
QT显示类控件---QSlider
开发语言·qt
dragoooon342 小时前
[C++——lesson30.数据结构进阶——「红黑树」]
开发语言·数据结构·c++
云泽8082 小时前
C++ STL 栈与队列完全指南:从容器使用到算法实现
开发语言·c++·算法
郑州光合科技余经理2 小时前
实战:攻克海外版同城生活服务平台开发五大挑战
java·开发语言·javascript·数据库·git·php·生活
蟹至之2 小时前
【MySQL】JDBC的使用(万字解析)
java·数据库·mysql·jdbc