List
接口是Java集合框架中的核心接口之一,继承自Collection
接口。它表示一个有序的集合(也称为序列),允许存储重复的元素,并且提供了丰富的操作方法。
一、添加元素的方法
这些方法用于向List
中添加元素,支持灵活的插入操作。
1. boolean add(E e)
- 功能:在列表的末尾追加一个指定的元素。
- 返回值:返回
true
表示添加成功(通常总是true
,除非底层实现有限制)。 - 示例:
java List<String> list = new ArrayList<>(); list.add("Apple"); // 列表变为 ["Apple"] list.add("Banana"); // 列表变为 ["Apple", "Banana"]
- 注意:如果列表有容量限制(如某些特殊实现),可能会抛出异常。
2. void add(int index, E element)
- 功能:在列表的指定位置插入元素,后续元素会向后移动。
- 参数:
index
是插入位置(从0开始),element
是要插入的元素。 - 异常:如果
index
超出范围(index < 0 || index > size()
),抛出IndexOutOfBoundsException
。 - 示例:
java List<String> list = new ArrayList<>(Arrays.asList("Apple", "Banana")); list.add(1, "Orange"); // 列表变为 ["Apple", "Orange", "Banana"]
- 使用场景:适用于需要在特定位置插入元素的场景,但频繁操作可能影响性能(尤其在
ArrayList
中)。
3. boolean addAll(Collection<? extends E> c)
- 功能:将另一个集合中的所有元素追加到列表末尾。
- 返回值:返回
true
表示列表发生了变化(即添加了元素)。 - 示例:
java List<String> list = new ArrayList<>(Arrays.asList("Apple")); List<String> more = Arrays.asList("Banana", "Orange"); list.addAll(more); // 列表变为 ["Apple", "Banana", "Orange"]
- 注意:集合
c
中的元素类型必须与List
兼容。
4. boolean addAll(int index, Collection<? extends E> c)
- 功能:将另一个集合中的所有元素插入到指定位置,后续元素后移。
- 示例:
java List<String> list = new ArrayList<>(Arrays.asList("Apple", "Banana")); List<String> more = Arrays.asList("Orange", "Grape"); list.addAll(1, more); // 列表变为 ["Apple", "Orange", "Grape", "Banana"]
- 异常:
index
超出范围时抛出IndexOutOfBoundsException
。
二、删除元素的方法
这些方法用于从List
中移除元素,支持按索引或对象删除。
1. E remove(int index)
- 功能:删除指定位置的元素,并返回被删除的元素。
- 异常:
index
超出范围时抛出IndexOutOfBoundsException
。 - 示例:
java List<String> list = new ArrayList<>(Arrays.asList("Apple", "Banana")); String removed = list.remove(0); // 移除 "Apple",返回 "Apple",列表变为 ["Banana"]
2. boolean remove(Object o)
- 功能:删除列表中第一次出现的指定元素。
- 返回值:返回
true
表示成功删除,false
表示元素不存在。 - 示例:
java List<String> list = new ArrayList<>(Arrays.asList("Apple", "Banana", "Apple")); list.remove("Apple"); // 移除第一个 "Apple",列表变为 ["Banana", "Apple"]
- 注意:依赖对象的
equals()
方法判断相等性。
3. boolean removeAll(Collection<?> c)
- 功能:移除列表中出现在指定集合
c
中的所有元素。 - 返回值:返回
true
表示列表发生了变化。 - 示例:
java List<String> list = new ArrayList<>(Arrays.asList("Apple", "Banana", "Orange")); list.removeAll(Arrays.asList("Apple", "Orange")); // 列表变为 ["Banana"]
4. boolean retainAll(Collection<?> c)
- 功能:仅保留列表中出现在指定集合
c
中的元素,删除其他元素。 - 返回值:返回
true
表示列表发生了变化。 - 示例:
java List<String> list = new ArrayList<>(Arrays.asList("Apple", "Banana", "Orange")); list.retainAll(Arrays.asList("Apple", "Orange")); // 列表变为 ["Apple", "Orange"]
三、获取和设置元素的方法
这些方法用于访问或修改列表中的元素。
1. E get(int index)
- 功能:返回指定位置的元素。
- 异常:
index
超出范围时抛出IndexOutOfBoundsException
。 - 示例:
java List<String> list = new ArrayList<>(Arrays.asList("Apple", "Banana")); String item = list.get(1); // 返回 "Banana"
2. E set(int index, E element)
- 功能:用新元素替换指定位置的元素,并返回原来的元素。
- 示例:
java List<String> list = new ArrayList<>(Arrays.asList("Apple", "Banana")); String old = list.set(0, "Orange"); // 返回 "Apple",列表变为 ["Orange", "Banana"]
四、查找和检查的方法
这些方法用于搜索元素或检查列表状态。
1. int indexOf(Object o)
- 功能:返回指定元素第一次出现的索引,未找到返回
-1
。 - 示例:
java List<String> list = new ArrayList<>(Arrays.asList("Apple", "Banana", "Apple")); int index = list.indexOf("Apple"); // 返回 0
2. int lastIndexOf(Object o)
- 功能:返回指定元素最后一次出现的索引,未找到返回
-1
。 - 示例:
java List<String> list = new ArrayList<>(Arrays.asList("Apple", "Banana", "Apple")); int index = list.lastIndexOf("Apple"); // 返回 2
3. boolean contains(Object o)
- 功能:检查列表是否包含指定元素。
- 示例:
java List<String> list = new ArrayList<>(Arrays.asList("Apple", "Banana")); boolean has = list.contains("Banana"); // 返回 true
4. boolean containsAll(Collection<?> c)
- 功能:检查列表是否包含指定集合中的所有元素。
- 示例:
java List<String> list = new ArrayList<>(Arrays.asList("Apple", "Banana", "Orange")); boolean hasAll = list.containsAll(Arrays.asList("Apple", "Orange")); // 返回 true
五、大小和判空的方法
这些方法用于检查列表的基本状态。
1. int size()
- 功能:返回列表中的元素数量。
- 示例:
java List<String> list = new ArrayList<>(Arrays.asList("Apple", "Banana")); int size = list.size(); // 返回 2
2. boolean isEmpty()
- 功能:检查列表是否为空。
- 示例:
java List<String> list = new ArrayList<>(); boolean empty = list.isEmpty(); // 返回 true
六、子列表和视图的方法
这些方法用于操作列表的一部分。
1. List<E> subList(int fromIndex, int toIndex)
- 功能:返回从
fromIndex
(包含)到toIndex
(不包含)的子列表视图。 - 特点:子列表是原列表的“视图”,修改子列表会影响原列表,反之亦然。
- 示例:
java List<String> list = new ArrayList<>(Arrays.asList("Apple", "Banana", "Orange")); List<String> sub = list.subList(1, 3); // 返回 ["Banana", "Orange"] sub.set(0, "Grape"); // 原列表变为 ["Apple", "Grape", "Orange"]
七、迭代和遍历的方法
这些方法支持遍历列表中的元素。
1. Iterator<E> iterator()
- 功能:返回一个迭代器,用于顺序遍历列表。
- 示例:
java List<String> list = new ArrayList<>(Arrays.asList("Apple", "Banana")); Iterator<String> it = list.iterator(); while (it.hasNext()) { System.out.println(it.next()); // 输出 "Apple", "Banana" }
2. ListIterator<E> listIterator()
- 功能:返回一个支持双向遍历的列表迭代器。
- 特点:相比
Iterator
,支持向前遍历和修改元素。 - 示例:
java List<String> list = new ArrayList<>(Arrays.asList("Apple", "Banana")); ListIterator<String> lit = list.listIterator(); while (lit.hasNext()) { lit.next(); } while (lit.hasPrevious()) { System.out.println(lit.previous()); // 输出 "Banana", "Apple" }
3. ListIterator<E> listIterator(int index)
- 功能:从指定位置开始返回列表迭代器。
- 示例:
java List<String> list = new ArrayList<>(Arrays.asList("Apple", "Banana", "Orange")); ListIterator<String> lit = list.listIterator(1); System.out.println(lit.next()); // 输出 "Banana"
八、批量操作和转换的方法
这些方法用于批量处理或转换列表。
1. void clear()
- 功能:移除列表中的所有元素。
- 示例:
java List<String> list = new ArrayList<>(Arrays.asList("Apple", "Banana")); list.clear(); // 列表变为空
2. Object[] toArray()
- 功能:返回包含列表所有元素的数组。
- 示例:
java List<String> list = new ArrayList<>(Arrays.asList("Apple", "Banana")); Object[] array = list.toArray(); // 返回 {"Apple", "Banana"}
3. <T> T[] toArray(T[] a)
- 功能:返回指定类型的数组,若传入数组不足以容纳元素,会创建新数组。
- 示例:
java List<String> list = new ArrayList<>(Arrays.asList("Apple", "Banana")); String[] array = list.toArray(new String[0]); // 返回 {"Apple", "Banana"}
九、默认方法(Java 8+)
这些方法在Java 8中引入,增强了List
的功能。
1. void sort(Comparator<? super E> c)
- 功能:根据指定比较器对列表排序。
- 示例:
java List<String> list = new ArrayList<>(Arrays.asList("Banana", "Apple")); list.sort(Comparator.naturalOrder()); // 列表变为 ["Apple", "Banana"]
2. void replaceAll(UnaryOperator<E> operator)
- 功能:对每个元素应用操作符并替换。
- 示例:
java List<String> list = new ArrayList<>(Arrays.asList("apple", "banana")); list.replaceAll(String::toUpperCase); // 列表变为 ["APPLE", "BANANA"]
3. Spliterator<E> spliterator()
- 功能:返回一个可分割迭代器,支持并行处理。
- 使用场景:适用于大数据量的并行遍历。
十、其他方法
这些方法用于比较或生成哈希值。
1. boolean equals(Object o)
- 功能:比较两个列表是否相等(元素顺序和内容一致)。
- 示例:
java List<String> list1 = new ArrayList<>(Arrays.asList("Apple", "Banana")); List<String> list2 = new ArrayList<>(Arrays.asList("Apple", "Banana")); boolean equal = list1.equals(list2); // 返回 true
2. int hashCode()
- 功能:返回列表的哈希值,用于哈希表等场景。
- 特点:与
equals()
一致的哈希值。
总结与实现类特性
List
接口的这些方法使其成为处理有序集合的强大工具。常见的实现类包括:
ArrayList
:基于动态数组,适合随机访问(get
、set
快),但插入删除较慢。LinkedList
:基于双向链表,适合频繁插入和删除(add
、remove
快),但随机访问较慢。Vector
:线程安全的ArrayList
,性能较低,现代开发中较少使用。
评论留言
欢迎您,!您可以在这里畅言您的的观点与见解!
0 条评论