📜  Java中的迭代器与集合(1)

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

Java中的迭代器与集合

Java中的集合是一组对象的容器,它们可以用于存储和操作一组对象。Java提供了一些常用的集合类,如List、Set、Map等。

为了遍历集合中的元素,Java提供了迭代器Iterator接口。迭代器是一种设计模式,它提供了一种顺序访问容器中的元素的方法,而无需暴露容器本身的内部实现。

迭代器的使用

在Java中,迭代器Iterator接口有两个主要的方法:

  • hasNext():判断容器中是否还有元素需要遍历。
  • next():返回容器中的下一个元素。

迭代器的使用示例:

List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("orange");

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String fruit = iterator.next();
    System.out.println(fruit);
}

上述代码中,我们先创建了一个ArrayList集合,并向其中添加了三个元素。然后我们调用iterator()方法获取List的迭代器实例,利用while循环遍历List中的元素,每次调用iterator.next()方法获取下一个元素,并输出到控制台。

集合的分类

Java中的集合类可以分为两类:

  • List:有序,允许重复元素。
  • Set:无序,不允许重复元素。

Java中的集合类有很多,其中比较常用的包括:

  • ArrayList:实现了List接口,基于数组实现,支持快速随机访问,但插入和删除元素的效率相对较低。
  • LinkedList:实现了List接口,基于链表实现,支持快速插入和删除元素,但访问元素的效率相对较低。
  • HashSet:实现了Set接口,基于哈希表实现,不允许重复元素,支持快速查询,但元素的顺序是不确定的。
  • TreeSet:实现了Set接口,基于红黑树实现,不允许重复元素,支持有序操作。
  • HashMap:实现了Map接口,基于哈希表实现,存储<key, value>键值对,不允许重复的key,支持快速查询。
  • TreeMap:实现了Map接口,基于红黑树实现,不允许重复的key,支持有序操作。
改进的迭代器

Java8引入了一种新的迭代器,叫做Stream。与传统的迭代器不同,Stream是一种惰性操作,它可以对数据流进行一系列复杂的操作,如过滤、映射、分组、统计等等,而且能够自动进行并行计算。使用Stream可以简化集合的遍历和处理过程。

使用Stream对List进行过滤、映射和分组的示例:

List<String> fruits = Arrays.asList("apple", "banana", "orange", "peach");

// 过滤满足条件的元素
List<String> filterResult = fruits.stream().filter(str -> str.length() > 5).collect(Collectors.toList());

// 将List中的元素进行一定的映射
List<String> mapResult = fruits.stream().map(str -> str.toUpperCase()).collect(Collectors.toList());

// 将List中的元素按某个条件进行分组
Map<Character, List<String>> groupResult = fruits.stream().collect(Collectors.groupingBy(str -> str.charAt(0)));

上述代码中,我们先创建了一个包含四个元素的List。在第一个例子中,我们使用stream()方法将List转换成Stream,并使用filter()方法筛选出长度大于5的字符串;Collectors.toList()方法用于将Stream转换成List类型。

在第二个例子中,我们使用map()方法将List中的所有字符串转换成大写。

在第三个例子中,我们使用groupingBy()方法将List中的所有字符串按首字母分组成Map。

结论

Java中的集合和迭代器是非常常用、基础、重要的知识点。掌握集合和迭代器的使用方法,可以让程序员更加高效地处理和操作数据。此外,Java8引入的Stream对于对数据处理和统计非常有用,也是程序员需要了解的一种技术。