Java :List接口中的主要方法

25°C 26-04-2025 notbyai
最近更新于:2025-04-26 21:48:02

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:基于动态数组,适合随机访问(getset快),但插入删除较慢。
  • LinkedList:基于双向链表,适合频繁插入和删除(addremove快),但随机访问较慢。
  • Vector:线程安全的ArrayList,性能较低,现代开发中较少使用。

评论留言

欢迎您,!您可以在这里畅言您的的观点与见解!

0 条评论