在Java里,集合遍历是常见操作,不同类型的集合有多种遍历方式。下面为你详细介绍常见的遍历方式、适用场景及优缺点。

1. for 循环(适用于 List

import java.util.ArrayList;
import java.util.List;

public class ForLoopExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("apple");
        list.add("banana");
        list.add("cherry");

        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }
}
  • 优点:可以按索引访问元素,便于随机访问和修改元素。
  • 缺点:代码相对冗长,不适合遍历非 List 集合。

2. 增强 for 循环(适用于 Collection

import java.util.ArrayList;
import java.util.Collection;

public class EnhancedForLoopExample {
    public static void main(String[] args) {
        Collection<String> collection = new ArrayList<>();
        collection.add("apple");
        collection.add("banana");
        collection.add("cherry");

        for (String element : collection) {
            System.out.println(element);
        }
    }
}
  • 优点:代码简洁,适用于所有实现了 Iterable 接口的集合。
  • 缺点:无法获取当前元素的索引,不能在遍历过程中修改集合(会抛出 ConcurrentModificationException)。

3. Iterator 迭代器(适用于 Collection

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class IteratorExample {
    public static void main(String[] args) {
        Collection<String> collection = new ArrayList<>();
        collection.add("apple");
        collection.add("banana");
        collection.add("cherry");

        Iterator<String> iterator = collection.iterator();
        while (iterator.hasNext()) {
            String element = iterator.next();
            System.out.println(element);
        }
    }
}
  • 优点:可以在遍历过程中安全地删除元素,适用于所有实现了 Collection 接口的集合。
  • 缺点:代码相对复杂,只能单向遍历。

4. ListIterator 迭代器(仅适用于 List

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class ListIteratorExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("apple");
        list.add("banana");
        list.add("cherry");

        ListIterator<String> listIterator = list.listIterator();
        while (listIterator.hasNext()) {
            System.out.println(listIterator.next());
        }

        // 反向遍历
        while (listIterator.hasPrevious()) {
            System.out.println(listIterator.previous());
        }
    }
}
  • 优点:可以双向遍历 List,在遍历过程中安全地添加、删除和修改元素。
  • 缺点:仅适用于 List 集合,代码相对复杂。

5. Java 8 Stream API(适用于 Collection

import java.util.ArrayList;
import java.util.Collection;

public class StreamApiExample {
    public static void main(String[] args) {
        Collection<String> collection = new ArrayList<>();
        collection.add("apple");
        collection.add("banana");
        collection.add("cherry");

        collection.stream().forEach(System.out::println);
    }
}
  • 优点:代码简洁,支持并行处理,可与 Lambda 表达式结合使用,增强代码可读性。
  • 缺点:有一定学习成本,不适合简单的遍历场景。

综上所述,你可以依据具体需求和集合类型选择合适的遍历方式。