Java中的LIst

在Java中,List接口是集合框架(Collections Framework)的一部分,用于表示有序的集合(也称为序列)。List允许存储重复的元素,并且可以通过索引访问元素。以下是对Java中List的详细介绍:

  1. List接口概述

有序性:List中的元素是有序的,可以通过索引访问。

允许重复:List允许存储重复的元素。

动态调整大小:List可以根据需要动态调整大小。

  1. List接口的主要实现类

Java提供了多个List接口的实现类,常用的包括:

a. ArrayList

实现方式:基于动态数组实现。

特点:

访问速度快(通过索引访问的时间复杂度为O(1))。

适合频繁的随机访问。

插入和删除操作在中间位置时性能较低(需要移动元素)。

使用场景:适用于需要频繁随机访问元素的场景。

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

public class ArrayListExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");
        System.out.println(list);
    }
}

b. LinkedList

实现方式:基于双向链表实现。

特点:

插入和删除操作在中间位置时性能较高(不需要移动元素,只需调整指针)。

随机访问性能较低(需要从头或尾遍历链表)。

使用场景:适用于需要频繁在中间位置插入和删除元素的场景。

java 复制代码
import java.util.LinkedList;
import java.util.List;

public class LinkedListExample {
    public static void main(String[] args) {
        List<String> list = new LinkedList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");
        System.out.println(list);
    }
}

c. Vector

实现方式:类似于ArrayList,但线程安全。

特点:

所有方法都是同步的(线程安全)。

性能比ArrayList低,因为同步开销较大。

使用场景:适用于多线程环境下的集合操作。

java 复制代码
import java.util.List;
import java.util.Vector;

public class VectorExample {
    public static void main(String[] args) {
        List<String> list = new Vector<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");
        System.out.println(list);
    }
}

d. Stack

实现方式:继承自Vector,提供了栈(LIFO)的行为。

特点:

提供了push(), pop(), peek()等方法。

不推荐使用,因为Deque接口提供了更完整和现代的栈操作。

使用场景:需要栈行为的场景,但更推荐使用Deque的实现类如ArrayDeque。

java 复制代码
import java.util.Stack;

public class StackExample {
    public static void main(String[] args) {
        Stack<String> stack = new Stack<>();
        stack.push("Apple");
        stack.push("Banana");
        stack.push("Cherry");
        System.out.println(stack.pop()); // 输出: Cherry
        System.out.println(stack.peek()); // 输出: Banana
    }
}
  1. List接口的主要方法

以下是List接口中一些常用的方法:

添加元素:

boolean add(E e): 在列表末尾添加元素。

void add(int index, E element): 在指定位置插入元素。

删除元素:

boolean remove(Object o): 删除第一个匹配的元素。

E remove(int index): 删除指定位置的元素。

获取元素:

E get(int index): 获取指定位置的元素。

设置元素:

E set(int index, E element): 替换指定位置的元素。

查找元素:

int indexOf(Object o): 返回第一个匹配元素的索引。

int lastIndexOf(Object o): 返回最后一个匹配元素的索引。

其他方法:

int size(): 返回列表的大小。

boolean isEmpty(): 判断列表是否为空。

void clear(): 清空列表。

boolean contains(Object o): 判断列表中是否包含指定元素。

List<E> subList(int fromIndex, int toIndex): 返回列表的子列表。

  1. 遍历List的方法

a. 使用传统的for循环

java 复制代码
for (String item : list) {
    System.out.println(item);
}

c. 使用迭代器(Iterator)

java 复制代码
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}

d. 使用forEach和Lambda表达式

java 复制代码
list.forEach(item -> System.out.println(item));

e. 使用Stream API

java 复制代码
list.stream().forEach(System.out::println);
相关推荐
2401_871151078 分钟前
十二月第14讲:使用Python实现两组数据纵向排序
开发语言·python·算法
数据小爬虫@21 分钟前
如何利用Java爬虫获得淘宝买家秀
java·开发语言·爬虫
Cachel wood30 分钟前
Vue.js前端框架教程5:Vue数据拷贝和数组函数
linux·前端·vue.js·python·阿里云·前端框架·云计算
匹马夕阳36 分钟前
防抖(Debounce)和节流(Throttle)的区别和应用场景
开发语言·前端·javascript
只会写bug的靓仔40 分钟前
无管理员权限 LCU auth-token、port 获取(全网首发 go)
开发语言·后端·golang
西猫雷婶1 小时前
python学opencv|读取图像(十五)BGR图像和HSV图像通道合并
开发语言·python·opencv
葟雪儿1 小时前
海思芯片 交叉编译curl
linux·运维·服务器·开发语言·c++·嵌入式硬件
WangMing_X1 小时前
C# 23种设计模式(4)访问者模式(Visitor Pattern)
开发语言·设计模式·c#·访问者模式
白子寰1 小时前
【python从入门到精通】-- 第七战:字典
开发语言·python
weixin_669960382 小时前
如何在Pycharm中添加环境
ide·python·pycharm