如何在Java中循环遍历 TreeSet?
TreeSet 是Java中 SortedSet 接口的最重要实现之一,它使用树进行存储。无论是否提供显式比较器,元素的顺序都由一个集合使用它们的自然顺序来维护。这必须与equals一致才能正确实现Set接口。
现在的任务是探索有多少种方法可以循环遍历 TreeSet。众所周知,TreeSet 提供了 SortedSet 接口的实现,而 SortedSet 扩展了 Set 接口。它的行为类似于一个简单的集合,不同之处在于它以排序格式存储元素。
以下是与 TreeSet 相关的一些特征,如下所示:
- TreeSet 使用树数据结构进行存储。
- 对象按排序的升序存储。但是我们可以使用 TreeSet.descendingIterator() 方法以降序迭代。
- 访问和检索时间非常快,这使得 TreeSet 成为以排序格式存储大量数据的绝佳选择。
- TreeSet 不使用 hashCode() 和 equals() 方法来比较它的元素。它使用 compare()(或 compareTo())方法来确定两个元素的相等性。
方法:
下面我们列出了在Java中迭代 TreeSet 的各种方法,我们将进一步讨论这些方法,并将为以下每种方法提供一个干净的Java程序,如下所示:
- 使用增强的 For 循环
- 使用迭代器
- 使用流(从 Java8 开始)
方法一:使用增强的 For 循环
增强的 For 循环可用于按以下方式循环 TreeSet。
句法:
for (Integer value : ts)
{
System.out.print(value);
}
例子
Java
// Java Program to Loop over TreeSet
// Using Enhanced For loop
// Importing required classes
import java.util.Iterator;
import java.util.TreeSet;
// Main class
public class GFG {
// Main driver method
public static void main(String[] args)
{
// Creating an empty TreeSet by
// declaring object of TreeSet class of Integer type
TreeSet ts = new TreeSet();
// Adding elements to above TreeSet object
ts.add(10);
ts.add(61);
ts.add(87);
ts.add(39);
// Display message for better readability
System.out.print("TreeSet: ");
// Looping over the TreeSet values
for (Integer value : ts)
// Print the values
System.out.print(value + ", ");
System.out.println();
}
}
Java
// Java program to loop over TreeSet
// Using Iterator
// Importing required classes
import java.util.Iterator;
import java.util.TreeSet;
// Main class
public class GFG {
// Main driver method
public static void main(String[] args)
{
// Creating an empty TreeSet by
// declaring an object of TreeSet class
TreeSet ts = new TreeSet();
// Adding elements to above object of TreeSet class
// Using add() method
ts.add(10);
ts.add(61);
ts.add(87);
ts.add(39);
// Create an Iterator over the TreeSet
Iterator iterator = ts.iterator();
// Display message for better readability
System.out.print("TreeSet: ");
// Looping over the TreeSet values
while (iterator.hasNext())
// Print all the values inside TreeSet object
System.out.print(iterator.next() + ", ");
System.out.println();
}
}
Java
// Java program to loop over TreeSet
// Using For-each and Stream in Java8
// Importing required classes
import java.util.Arrays;
import java.util.Iterator;
import java.util.TreeSet;
import java.util.stream.Collectors;
// Main class
public class GFG {
// Main driver method
public static void main(String[] args)
{
// Creating an empty TreeSet if integer type
TreeSet ts = new TreeSet();
// Adding elements to the TreeSet
// using addAll() method
ts.addAll(Arrays.asList(10, 61, 87, 39));
// Looping over the TreeSet & print values
System.out.print("TreeSet without Comma: ");
// Iterating through the TreeSet
// using forEach
ts.forEach(i -> System.out.print(i + " "));
System.out.println();
// Looping over the TreeSet & print values
System.out.print("TreeSet with Comma: ");
// Iterating through the TreeSet
// Using stream concept introduced in Java8
System.out.print(
ts.stream()
.map(i -> String.valueOf(i))
.collect(Collectors.joining(", ")));
}
}
输出
TreeSet: 10, 39, 61, 87,
方法二:使用迭代器
可以在 TreeSet 对象上创建迭代器。因此,此迭代器可用于遍历或循环 TreeSet。
句法:
Iterator iterator = ts.iterator();
while (iterator.hasNext())
{
System.out.print(iterator.next());
}
例子
Java
// Java program to loop over TreeSet
// Using Iterator
// Importing required classes
import java.util.Iterator;
import java.util.TreeSet;
// Main class
public class GFG {
// Main driver method
public static void main(String[] args)
{
// Creating an empty TreeSet by
// declaring an object of TreeSet class
TreeSet ts = new TreeSet();
// Adding elements to above object of TreeSet class
// Using add() method
ts.add(10);
ts.add(61);
ts.add(87);
ts.add(39);
// Create an Iterator over the TreeSet
Iterator iterator = ts.iterator();
// Display message for better readability
System.out.print("TreeSet: ");
// Looping over the TreeSet values
while (iterator.hasNext())
// Print all the values inside TreeSet object
System.out.print(iterator.next() + ", ");
System.out.println();
}
}
方法 3:使用Java 8 forEach / stream :
Java 8 forEach / stream 可用于以以下方式循环遍历 TreeSet。
句法:
Tree_Set.forEach(iterator -> System.out.print(i + " "));
// Using forEach
Tree_Set.stream().map(iterator -> String.valueOf(i)).collect(Collectors.joining(", "))
// Using stream
例子
Java
// Java program to loop over TreeSet
// Using For-each and Stream in Java8
// Importing required classes
import java.util.Arrays;
import java.util.Iterator;
import java.util.TreeSet;
import java.util.stream.Collectors;
// Main class
public class GFG {
// Main driver method
public static void main(String[] args)
{
// Creating an empty TreeSet if integer type
TreeSet ts = new TreeSet();
// Adding elements to the TreeSet
// using addAll() method
ts.addAll(Arrays.asList(10, 61, 87, 39));
// Looping over the TreeSet & print values
System.out.print("TreeSet without Comma: ");
// Iterating through the TreeSet
// using forEach
ts.forEach(i -> System.out.print(i + " "));
System.out.println();
// Looping over the TreeSet & print values
System.out.print("TreeSet with Comma: ");
// Iterating through the TreeSet
// Using stream concept introduced in Java8
System.out.print(
ts.stream()
.map(i -> String.valueOf(i))
.collect(Collectors.joining(", ")));
}
}
输出
TreeSet without Comma: 10 39 61 87
TreeSet with Comma: 10, 39, 61, 87