Java Iterator 接口表示一个能够迭代 Java 对象集合的对象,一次一个对象。 Iterator 接口是 Java 中用于迭代对象集合的最古老的机制之一(尽管不是最古老的——Enumerator 早于 Iterator)。
此外,迭代器与枚举有两点不同:
1. 迭代器允许调用者在元素迭代期间从指定集合中删除给定元素。
2. 方法名称得到增强。
Java
// Java program to illustrate Iterator interface
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class JavaIteratorExample1 {
public static void main(String[] args)
{
// create a linkedlist
List<String> list = new LinkedList<>();
// Add elements
list.add("Welcome");
list.add("to");
list.add("our");
list.add("website");
// print the list to the console
System.out.println("The list is given as : "
+ list);
// call iterator on the list
Iterator<String> itr = list.iterator();
// itr.hasNext() returns true if there
// is still an element next to the current
// element pointed by iterator
while (itr.hasNext()) {
// Returns the next element.
System.out.println(itr.next());
}
// Removes the last element.
itr.remove();
// print the list after removing an
// element
System.out.println(
"After the remove() method is called : "
+ list);
}
}
输出
The list is given as : [Welcome, to, our, website] Welcome to our website After the remove() method is called : [Welcome, to, our]
就像迭代器和ListIterator,分离器 是一个 Java 迭代器,用于从 List 实现的对象中迭代元素 one-by-one。
Spliterator的主要函数有:
- 拆分源数据
- 处理源数据
JDK 8 中包含 Interface Spliterator,用于利用顺序遍历之外的并行性优势。它被设计为迭代器的并行模拟。
Java
// Java program to illustrate a Spliterator
import java.util.*;
import java.util.stream.Stream;
public class InterfaceSpliteratorExample {
public static void main(String args[])
{
// Create an object of array list
ArrayList<Integer> list = new ArrayList<>();
// Add elements to the array list
list.add(101);
list.add(201);
list.add(301);
list.add(401);
list.add(501);
// create a stream on the list
Stream<Integer> str = list.stream();
// Get Spliterator object on stream
Spliterator<Integer> splitr = str.spliterator();
// Get size of the list
// encountered by the
// forEachRemaining method
System.out.println("Estimate size: "
+ splitr.estimateSize());
// Print getExactSizeIfKnown
// returns exact size if finite
// or return -1
System.out.println("Exact size: "
+ splitr.getExactSizeIfKnown());
// Check if the Spliterator has all
// the characteristics
System.out.println("Boolean Result: "
+ splitr.hasCharacteristics(
splitr.characteristics()));
System.out.println("Elements of ArrayList :");
// print elements using forEachRemaining
splitr.forEachRemaining(
(n) -> System.out.println(n));
// Obtaining another Stream to the array list.
Stream<Integer> str1 = list.stream();
splitr = str1.spliterator();
// Obtain spliterator using trySplit() method
Spliterator<Integer> splitr2 = splitr.trySplit();
// If splitr can be partitioned use splitr2 first.
if (splitr2 != null) {
System.out.println("Output from splitr2: ");
splitr2.forEachRemaining(
(n) -> System.out.println(n));
}
// Now, use the splitr
System.out.println("Output from splitr1: ");
splitr.forEachRemaining(
(n) -> System.out.println(n));
}
}
输出
Estimate size: 5 Exact size: 5 Boolean Result: true Elements of ArrayList : 101 201 301 401 501 Output from splitr2: 101 201 Output from splitr1: 301 401 501
java中Iterator和Spliterator的区别:
迭代器 |
Spliterator |
---|---|
Java 1.2 中引入 | Java 1.8 中引入 |
迭代器仅单独迭代元素 | Spliterator 可以单独或批量遍历元素 |
它是整个集合 API 的迭代器 | 它是 Collection 和 Stream API 的迭代器,Map 实现类除外 |
它使用外部迭代 | 它使用内部迭代。 |
它是一个通用迭代器 | 它不是通用迭代器 |
不支持并行编程 | 它通过分割给定的元素集来支持并行编程,以便每个集合都可以单独处理。 |
相关用法
- Java Iterator和Enumeration的区别用法及代码示例
- Java Iterator转Spliterator用法及代码示例
- Java Iterator转Stream用法及代码示例
- Java Iterator转List用法及代码示例
- Java Iterator转Iterable用法及代码示例
- Java Iterator用法及代码示例
- Java Iterable forEach()用法及代码示例
- Java Iterable转Collection用法及代码示例
- Java Iterable转Stream用法及代码示例
- Java Iterable用法及代码示例
- Java Integer divideUnsigned()用法及代码示例
- Java Integer equals()用法及代码示例
- Java Integer getInteger()用法及代码示例
- Java Integer longValue()用法及代码示例
- Java Integer max()用法及代码示例
- Java Integer min()用法及代码示例
- Java Integer numberOfLeadingZeros()用法及代码示例
- Java Integer numberOfTrailingZeros()用法及代码示例
- Java Integer parseInt()用法及代码示例
- Java Integer parseUnsignedInt()用法及代码示例
- Java Integer remainderUnsigned()用法及代码示例
- Java Integer reverseBytes(int i)用法及代码示例
- Java Integer toBinaryString()用法及代码示例
- Java Integer toHexString()用法及代码示例
- Java Integer toUnsignedLong()用法及代码示例
注:本文由纯净天空筛选整理自gargmikku941大神的英文原创作品 Difference Between Iterator and Spliterator in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。