jsp网站建设教程,建网站程序,项目建设全过程,大连网页正文
在 Java 集合框架中#xff0c;List 是一个非常重要的接口#xff0c;广泛用于存储有序的元素集合。本文将带你深入了解 List 接口的基本用法、常见实现类及其扩展#xff0c;同时通过实际代码示例帮助你快速掌握这些知识。 #x1f449;点击获取2024Java学习资料
1…正文
在 Java 集合框架中List 是一个非常重要的接口广泛用于存储有序的元素集合。本文将带你深入了解 List 接口的基本用法、常见实现类及其扩展同时通过实际代码示例帮助你快速掌握这些知识。 点击获取2024Java学习资料
1. 什么是 List
List 是 Java 集合框架中的一个接口它继承了 Collection 接口用于存储一组有序的元素。与普通数组相比List 提供了动态调整大小和丰富操作方法的功能。
特点
元素有序可通过索引访问。允许存储重复的元素。可以存储 null 值。
常用实现类
ArrayListLinkedListVectorCopyOnWriteArrayList线程安全 2. List 的基本操作
以下是 List 接口的一些常用方法
方法描述add(E e)在列表末尾添加元素add(int index, E e)在指定位置插入元素get(int index)根据索引获取元素set(int index, E e)修改指定索引的元素remove(int index)移除指定索引的元素size()返回列表中元素的数量contains(Object o)判断列表是否包含指定元素indexOf(Object o)返回元素的首次出现索引isEmpty()判断列表是否为空
代码示例
import java.util.*;public class ListDemo {public static void main(String[] args) {ListString list new ArrayList();// 添加元素list.add(Java);list.add(Python);list.add(C);// 插入元素list.add(1, JavaScript);// 获取元素System.out.println(元素 list.get(1));// 修改元素list.set(2, C#);// 删除元素list.remove(3);// 遍历列表for (String item : list) {System.out.println(item);}}
}3. 常用的 List 实现类
3.1 ArrayList
ArrayList 是基于动态数组实现的列表适合频繁查询的场景。
特点
随机访问效率高。插入或删除时可能需要移动大量元素。非线程安全。
代码示例
import java.util.ArrayList;public class ArrayListExample {public static void main(String[] args) {ArrayListInteger numbers new ArrayList();numbers.add(1);numbers.add(2);numbers.add(3);System.out.println(ArrayList: numbers);}
}3.2 LinkedList
LinkedList 是基于双向链表实现的列表适合频繁插入和删除的场景。
特点
查询效率较低需要从头开始遍历。插入和删除效率高。可以用作队列Queue或双端队列Deque。
代码示例
import java.util.LinkedList;public class LinkedListExample {public static void main(String[] args) {LinkedListString queue new LinkedList();queue.add(Alice);queue.add(Bob);queue.add(Charlie);System.out.println(LinkedList: queue);// 模拟队列操作System.out.println(Poll: queue.poll()); // 移除并返回队首元素}
}3.3 Vector
Vector 是线程安全的动态数组适合多线程场景。
特点
每个方法都使用了同步机制。性能比 ArrayList 较低但线程安全。
代码示例
import java.util.Vector;public class VectorExample {public static void main(String[] args) {VectorString vector new Vector();vector.add(Apple);vector.add(Banana);vector.add(Cherry);System.out.println(Vector: vector);}
}3.4 CopyOnWriteArrayList
CopyOnWriteArrayList 是线程安全的 ArrayList 实现适合多线程且读多写少的场景。
特点
每次修改时都会复制底层数组。读操作不需要锁性能高。写操作的性能较低。
代码示例
import java.util.concurrent.CopyOnWriteArrayList;public class CopyOnWriteArrayListExample {public static void main(String[] args) {CopyOnWriteArrayListString list new CopyOnWriteArrayList();list.add(Thread-safe);list.add(Example);System.out.println(CopyOnWriteArrayList: list);}
}4. List 的扩展用法
4.1 排序操作
Collections.sort 方法可以对列表进行排序
代码示例
import java.util.*;public class SortExample {public static void main(String[] args) {ListInteger numbers Arrays.asList(5, 3, 8, 1);Collections.sort(numbers);System.out.println(排序后: numbers);}
}4.2 遍历方式 for-each 循环 for (String item : list) {System.out.println(item);
}Iterator IteratorString iterator list.iterator();
while (iterator.hasNext()) {System.out.println(iterator.next());
}Stream API list.stream().forEach(System.out::println);4.3 Stream 和 Lambda 表达式
利用 Stream 可以方便地对列表进行操作
代码示例
import java.util.*;public class StreamExample {public static void main(String[] args) {ListString names Arrays.asList(Alice, Bob, Charlie);names.stream().filter(name - name.startsWith(A)).forEach(System.out::println);}
}5. 面试中关于 List 的高频问题 ArrayList 和 LinkedList 的区别 ArrayList 基于数组查询快插入和删除慢。LinkedList 基于链表插入和删除快查询慢。 Vector 和 ArrayList 的区别 Vector 是线程安全的ArrayList 是非线程安全的。Vector 性能相对较低。 线程安全的 List 实现有哪些 VectorCopyOnWriteArrayList 如何避免 ConcurrentModificationException 使用 Iterator 的 remove 方法。使用线程安全的集合如 CopyOnWriteArrayList。 6. 总结
List 是 Java 集合框架中非常重要的一部分其各种实现类在不同的场景下各有优势。掌握 List 的基本用法和实现类的特性不仅有助于日常开发还能应对 Java 面试中的高频考察。
希望本文对你理解 List 及其常用扩展有所帮助