📜  Java ListIterator接口(1)

📅  最后修改于: 2023-12-03 14:42:15.140000             🧑  作者: Mango

Java ListIterator接口

Java ListIterator接口提供了一种在集合中迭代元素的方式,它继承了Iterator接口并扩展了其功能。ListIterator只能用于List集合,它允许我们在迭代时添加、删除和修改元素,而且可以在迭代过程中双向移动。

ListIterator的特性
  • 双向迭代:ListIterator可以向前和向后迭代
  • 修改元素:ListIterator可以修改当前指向的元素
  • 添加元素:ListIterator可以在特定位置添加元素
  • 删除元素:ListIterator可以删除当前指向的元素或前一个元素
ListIterator的方法
public interface ListIterator<E> extends Iterator<E> {
    boolean hasNext();
    E next();
    boolean hasPrevious();
    E previous();
    int nextIndex();
    int previousIndex();
    void remove();
    void set(E e);
    void add(E e);
}
hasNext() 和 next()
  • boolean hasNext(): 如果迭代器有更多的元素,就返回 true。
  • E next(): 返回迭代器中的下一个元素。
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("Ruby");

ListIterator<String> iterator = list.listIterator();
while (iterator.hasNext()) {
    String element = iterator.next();
    System.out.println(element);
}
hasPrevious() 和 previous()
  • boolean hasPrevious(): 如果列表迭代器在列表中有更多的元素,则返回 true。
  • E previous(): 返回列表中的上一个元素。
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("Ruby");

ListIterator<String> iterator = list.listIterator(list.size());
while (iterator.hasPrevious()) {
    String element = iterator.previous();
    System.out.println(element);
}
nextIndex() 和 previousIndex()
  • int nextIndex(): 返回迭代器在列表中的下一个元素的索引。
  • int previousIndex(): 返回迭代器在列表中的上一个元素的索引。
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("Ruby");

ListIterator<String> iterator = list.listIterator();
while (iterator.hasNext()) {
    int index = iterator.nextIndex();
    String element = iterator.next();
    System.out.println(index + ": " + element);
}
remove()
  • void remove(): 删除列表中迭代器返回的最后一个元素。
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("Ruby");

ListIterator<String> iterator = list.listIterator();
while(iterator.hasNext()) {
    String element = iterator.next();
    if (element.equalsIgnoreCase("Java")) {
        iterator.remove();
    }
}

System.out.println(list); // output: [Python, Ruby]
set() 和 add()
  • void set(E e): 用指定的元素替换列表中迭代器返回的最后一个元素。
  • void add(E e): 将指定的元素插入列表中。
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("Ruby");

ListIterator<String> iterator = list.listIterator();
while(iterator.hasNext()) {
    String element = iterator.next();
    if (element.equalsIgnoreCase("Python")) {
        iterator.set("JavaScript");
    } else if (element.equalsIgnoreCase("Ruby")) {
        iterator.add("Go");
    }
}

System.out.println(list); // output: [Java, JavaScript, Go, Ruby]
总结
  • ListIterator是Iterator接口的扩展,它只能用于List集合。
  • ListIterator提供了双向迭代和修改元素的功能。
  • ListIterator的方法包括 hasNext()、next()、hasPrevious()、previous()、nextIndex()、previousIndex()、remove()、set() 和 add()。
参考资料