我如何迭代一个集/HashSet没有以下?
Iterator iter = set.iterator();
while (iter.hasNext()) {
System.out.println(iter.next());
}
我如何迭代一个集/HashSet没有以下?
Iterator iter = set.iterator();
while (iter.hasNext()) {
System.out.println(iter.next());
}
当前回答
将集合转换为数组 也可以帮助你迭代元素:
Object[] array = set.toArray();
for(int i=0; i<array.length; i++)
Object o = array[i];
其他回答
下面是一些关于如何迭代Set及其性能的技巧:
public class IterateSet {
public static void main(String[] args) {
//example Set
Set<String> set = new HashSet<>();
set.add("Jack");
set.add("John");
set.add("Joe");
set.add("Josh");
long startTime = System.nanoTime();
long endTime = System.nanoTime();
//using iterator
System.out.println("Using Iterator");
startTime = System.nanoTime();
Iterator<String> setIterator = set.iterator();
while(setIterator.hasNext()){
System.out.println(setIterator.next());
}
endTime = System.nanoTime();
long durationIterator = (endTime - startTime);
//using lambda
System.out.println("Using Lambda");
startTime = System.nanoTime();
set.forEach((s) -> System.out.println(s));
endTime = System.nanoTime();
long durationLambda = (endTime - startTime);
//using Stream API
System.out.println("Using Stream API");
startTime = System.nanoTime();
set.stream().forEach((s) -> System.out.println(s));
endTime = System.nanoTime();
long durationStreamAPI = (endTime - startTime);
//using Split Iterator (not recommended)
System.out.println("Using Split Iterator");
startTime = System.nanoTime();
Spliterator<String> splitIterator = set.spliterator();
splitIterator.forEachRemaining((s) -> System.out.println(s));
endTime = System.nanoTime();
long durationSplitIterator = (endTime - startTime);
//time calculations
System.out.println("Iterator Duration:" + durationIterator);
System.out.println("Lamda Duration:" + durationLambda);
System.out.println("Stream API:" + durationStreamAPI);
System.out.println("Split Iterator:"+ durationSplitIterator);
}
}
代码是自解释的。
持续时间的结果是:
Iterator Duration: 495287
Lambda Duration: 50207470
Stream Api: 2427392
Split Iterator: 567294
我们可以看到Lambda耗时最长,而Iterator是最快的。
你可以使用一个增强的for循环:
Set<String> set = new HashSet<String>();
//populate set
for (String s : set) {
System.out.println(s);
}
或者使用Java 8:
set.forEach(System.out::println);
枚举(?):
Enumeration e = new Vector(set).elements();
while (e.hasMoreElements())
{
System.out.println(e.nextElement());
}
另一种方法(java.util.Collections.enumeration()):
for (Enumeration e1 = Collections.enumeration(set); e1.hasMoreElements();)
{
System.out.println(e1.nextElement());
}
Java 8:
set.forEach(element -> System.out.println(element));
or
set.stream().forEach((elem) -> {
System.out.println(elem);
});
您可以使用函数式操作来获得更简洁的代码
Set<String> set = new HashSet<String>();
set.forEach((s) -> {
System.out.println(s);
});
将集合转换为数组 也可以帮助你迭代元素:
Object[] array = set.toArray();
for(int i=0; i<array.length; i++)
Object o = array[i];