📜  如何在Java中循环遍历 TreeSet?

📅  最后修改于: 2022-05-13 01:54:23.650000             🧑  作者: Mango

如何在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程序,如下所示:

  1. 使用增强的 For 循环
  2. 使用迭代器
  3. 使用流(从 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