Java 如何循环使用TreeSet
TreeSet是Java中SortedSet接口的最重要的实现之一,它使用Tree来存储。无论是否提供显式比较器,元素的排序都是由一个集合使用其自然排序来维护的。如果要正确地实现Set接口,这必须与equals一致。
现在的任务是探索出有多少种方法可以在TreeSet上循环。我们都知道TreeSet提供了对SortedSet接口的实现,SortedSet扩展了Set接口。它的行为就像一个简单的集合,不同的是它以排序的方式存储元素。

下面是与TreeSet相关的一些特性,具体如下。
- TreeSet使用树形数据结构进行存储。
- 对象是以排序后的升序存储的。但是我们可以使用TreeSet.descendingIterator()方法进行降序迭代。
- 访问和检索时间非常快,这使得TreeSet成为以排序格式存储大量数据的最佳选择。
- TreeSet不使用hashCode()和equals()方法来比较它的元素。它使用compare()(或compareTo())方法来确定两个元素是否相等。
方法
下面我们列出了在java中迭代TreeSet的各种方法,我们将进一步讨论这些方法,并将为以下每个方法提供一个干净的java程序。
- 使用增强型For循环
- 使用迭代器
- 使用流(从Java8开始)。
方法1: 使用增强型For循环
增强型For循环可以用来在TreeSet上以下面的方式进行循环。
语法
for (Integer value : ts)
{
System.out.print(value);
}
例子
// 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<Integer> ts = new TreeSet<Integer>();
// 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();
}
}
输出
TreeSet: 10, 39, 61, 87,
方法2: 使用Iterator
迭代器可以在TreeSet对象上创建。因此,这个迭代器可以用来遍历或循环TreeSet。
语法
Iterator iterator = ts.iterator();
while (iterator.hasNext())
{
System.out.print(iterator.next());
}
例子
// 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<Integer> ts = new TreeSet<Integer>();
// 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<Integer> 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 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<Integer> ts = new TreeSet<Integer>();
// 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
极客教程