java数据结构--List的介绍

一、什么是List

在 Java 中,Listjava.util包下的一个接口 ,继承自Collection接口,是 Java 集合框架的重要组成部分。它用于存储有序的、可重复的元素集合,允许通过索引(位置)访问元素。

List 的核心特性:

  • 有序性:元素的插入顺序与存储顺序一致
  • 可重复性 :允许包含相同的元素(通过equals()方法判断)
  • 索引访问:可以通过整数索引(从 0 开始)精确访问、修改元素
  • 动态容量 :大多数实现类(如ArrayList)会自动扩容,无需手动指定大小

常见的 List 实现类:

  • **ArrayList:**基于动态数组实现,查询效率高,增删效率低(尤其中间位置)
  • **LinkedList:**基于双向链表实现,增删效率高,查询效率低
  • Vector 线程安全的动态数组(已基本被ArrayList替代)
  • Stack 继承自Vector,实现栈结构(推荐使用Deque替代)

二、List 接口的常见方法

List 接口继承了Collection的所有方法,并增加了针对索引操作的特有方法,主要包括:

2.1.添加元素

  • boolean add(E e):在列表末尾添加元素
  • void add(int index, E element):在指定索引处插入元素
  • boolean addAll(Collection<? extends E> c):添加集合中所有元素到末尾
  • boolean addAll(int index, Collection<? extends E> c):从指定索引开始添加集合元素

2.2.删除元素

  • E remove(int index):删除并返回指定索引处的元素
  • boolean remove(Object o):删除第一个与指定对象相等的元素
  • boolean removeAll(Collection<?> c):删除所有包含在指定集合中的元素
  • void clear():清空列表所有元素

2.3.修改元素

  • E set(int index, E element):替换指定索引处的元素,并返回旧元素

2.4.查询元素

  • E get(int index):返回指定索引处的元素
  • int indexOf(Object o):返回第一个与指定对象相等的元素索引(不存在返回 - 1)
  • int lastIndexOf(Object o):返回最后一个与指定对象相等的元素索引
  • boolean contains(Object o):判断列表是否包含指定元素
  • int size():返回列表元素个数
  • boolean isEmpty():判断列表是否为空

2.5.其他操作

  • List<E> subList(int fromIndex, int toIndex):返回从fromIndex(包含)到toIndex(不包含)的子列表
  • Object[] toArray():将列表转换为数组
  • Iterator<E> iterator():返回迭代器,用于遍历元素

三、List的使用

下面以最常用的ArrayList为例,演示 List 的基本使用:

java 复制代码
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;

public class ListExample {
    public static void main(String[] args) {
        // 1. 创建List对象(多态写法,推荐使用接口引用)
        List<String> fruits = new ArrayList<>();
        
        // 2. 添加元素
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Cherry");
        fruits.add(1, "Blueberry"); // 在索引1处插入元素
        
        System.out.println("列表元素: " + fruits); 
        // 输出: [Apple, Blueberry, Banana, Cherry]
        
        // 3. 访问元素
        String firstFruit = fruits.get(0);
        System.out.println("第一个元素: " + firstFruit); // 输出: Apple
        
        // 4. 修改元素
        String oldFruit = fruits.set(2, "Grape");
        System.out.println("被替换的元素: " + oldFruit); // 输出: Banana
        System.out.println("修改后列表: " + fruits); 
        // 输出: [Apple, Blueberry, Grape, Cherry]
        
        // 5. 删除元素
        String removedFruit = fruits.remove(3);
        System.out.println("删除的元素: " + removedFruit); // 输出: Cherry
        
        // 6. 遍历元素(三种方式)
        System.out.println("\n遍历方式1: for循环");
        for (int i = 0; i < fruits.size(); i++) {
            System.out.println(fruits.get(i));
        }
        
        System.out.println("\n遍历方式2: 增强for循环");
        for (String fruit : fruits) {
            System.out.println(fruit);
        }
        
        System.out.println("\n遍历方式3: 迭代器");
        Iterator<String> iterator = fruits.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
        
        // 7. 其他常用操作
        System.out.println("\n是否包含Apple: " + fruits.contains("Apple")); // true
        System.out.println("元素个数: " + fruits.size()); // 3
        System.out.println("是否为空: " + fruits.isEmpty()); // false
        
        // 8. 清空列表
        fruits.clear();
        System.out.println("清空后是否为空: " + fruits.isEmpty()); // true
    }
}

使用场景选择

  • 频繁查询、较少增删时,优先使用ArrayList
  • 频繁在中间位置增删、较少查询时,优先使用LinkedList
  • 需要线程安全时,可使用Collections.synchronizedList(List)包装普通 List

List 是 Java 中最常用的集合类型之一,熟练掌握其用法对于处理有序数据集合至关重要。

相关推荐
清心歌1 分钟前
CopyOnWriteArrayList 实现原理
java·开发语言
Java成神之路-22 分钟前
通俗易懂理解 Spring MVC 拦截器:概念、流程与简单实现(Spring系列16)
java·spring·mvc
zhanghongbin0124 分钟前
AI 采集器:Claude Code、OpenAI、LiteLLM 监控
java·前端·人工智能
良木生香25 分钟前
【C++初阶】C++入门相关知识(2):输入输出 & 缺省参数 & 函数重载
开发语言·c++
计算机毕设vx_bysj686926 分钟前
【免费领源码】77196基于java的手机银行app管理系统的设计与实现 计算机毕业设计项目推荐上万套实战教程JAVA,node.js,C++、python、大屏数据可视化
java·mysql·智能手机·课程设计
忘梓.26 分钟前
墨色规则与血色节点:C++红黑树设计与实现探秘
java·开发语言·c++
hhh3u3u3u27 分钟前
Visual C++ 6.0中文版安装包下载教程及win11安装教程
java·c语言·开发语言·c++·python·c#·vc-1
星河耀银海30 分钟前
C++ 模板进阶:特化、萃取与可变参数模板
java·开发语言·c++
cccccc语言我来了34 分钟前
【C++---unordered_set/map底层封装】个不拘一格的集合。它不似有序集合那般循规蹈矩,而是以一种洒脱不羁的方式,将元素们随意地散落其中。每一个元素都是独一无二的。
开发语言·c++·哈希算法
Zfox_34 分钟前
C++ IO流全解析:标准库中的数据处理与文件读写艺术
开发语言·c++