【Java集合框架】3 - 3 List 集合

§3-3 List 集合

3-3.1 List 集合的特点

image

ListCollection 中的一个接口,该系列集合属于单列集合,其特点为:

  • 有序:数据存取的顺序一致;
  • 可重复:允许存放重复的元素;
  • 有索引:可以通过索引操作元素;

List 集合中的方法

  • 由于 ListCollection 的子接口,因此其继承了所有 Collection 中的方法;
  • 由于 List 集合具有索引,该集合具有很多与索引有关的方法;

与索引有关的方法:(增删改查)

方法 描述
void add(int index, E element) 在此列表中的指定位置插入指定元素
E remove(int index) 删除此列表中指定位置的元素,且返回该元素
E set(int index, E element) 修改此列表中指定位置的元素,并返回该元素
E get(int index) 返回此列表中指定位置的元素

注意

  • 若使用了整型的包装类创建 List,调用 remove() 方法时,传入参数不会自动装拆箱;

    这一点对于任何具有重载的方法都适用,会优先调用实参与形参类型一致的重载;

3-3.2 List 的遍历方式

由于 List 继承于 Collection,父接口所适用的遍历方式对于 List 也同样适用。

List 也存在其独有的遍历方式。

3-3.2.1 使用 Collection 的遍历方式

示例1:迭代器遍历

public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    
    list.add("Hello");
    list.add("World");
    list.add("and");
    list.add("Java");
    
    Iterator<String> iterator = list.iterator();
    while (iterator.hasNext()) {
        System.out.println(iterator.next());
    }
}

示例2:增强 for 循环

public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    
    list.add("Hello");
    list.add("World");
    list.add("and");
    list.add("Java");
    
    for (String s : list) {
        System.out.println(s);
    }
}

示例3forEach 结合 Lambda 表达式

public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    
    list.add("Hello");
    list.add("World");
    list.add("and");
    list.add("Java");
    
    list.forEach(s -> System.out.println(s));
}

3-3.2.2 普通 for 循环

由于 List 具有索引,可以使用普通 for 遍历。

示例

public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    
    list.add("Hello");
    list.add("World");
    list.add("and");
    list.add("Java");
    
    for (int i = 0; i < list.size(); i++) {
        System.out.println(list.get(i));
    }
}

3-3.2.3 列表迭代器

ListIterator<E> 是一个接口,位于 java.util 包下,继承自 Iterator<E>

方法列表

方法 描述
ListIterator<E> listIterator() 返回列表迭代器对象,默认指向起始处
ListIterator<E> listIterator(int index) 返回列表迭代器对象,并指定起始位置
boolean hasNext() 正向遍历该列表时,判断该列表是否具有更多元素
E next() 返回下一元素,并后移迭代器对象
boolean hasPrevious() 逆向遍历该列表时,判断该列表是否具有更多元素
E previous() 返回上一个元素,并将迭代器前移
void add(E e) 将指定元素添加到列表中(可选操作)
void remove() 删除迭代器返回的最后一个元素(可选操作)
void set(E e) 将迭代器返回的最后一个元素替换为指定元素

注意

  1. 若无更多元素(指向空),尝试返回该位置的元素会抛出异常 NoSuchElementException
  2. 由于有 previous() 方法,可以通过逆向遍历列表复位列表迭代器;
  3. 遍历过程中,使用集合的方法增删改元素是不允许的,会抛出异常 ConcurrentModificationException
  4. 不同于 Collection 迭代器,该迭代器支持增添、修改元素;
posted @ 2023-08-03 23:32  Zebt  阅读(31)  评论(0)    收藏  举报