📜  在Java中将 HashSet 转换为 TreeSet

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

在Java中将 HashSet 转换为 TreeSet

Hashset: Java中的Hashset一般用于搜索、插入、删除等操作。这些操作平均需要恒定的时间。 HashSet 比 TreeSet 快。 HashSet 是使用哈希表实现的。

TreeSet: Java中的 TreeSet 查找、插入和删除的时间为 O(log n),高于 HashSet。但是 TreeSet 保持排序的数据。此外,它还支持higher()(返回最低高元素)、floor()、ceiling() 等操作。这些操作在 TreeSet 中也是 O(log n),在 HashSet 中不支持。 TreeSet 是使用自平衡二叉搜索树(红黑树)实现的。 TreeSet 由Java中的 TreeMap 支持。

一般来说,如果您想要一个排序集,那么最好将元素添加到 HashSet 然后将其转换为 TreeSet,而不是创建 TreeSet 并向其添加元素。

给定一个 HashSet,任务是将其转换为Java中的 TreeSet。

例子:

HashSet: [Geeks, For, Welcome, To]
TreeSet: [For, Geeks, To, Welcome]

HashSet: [1, 2, 3, 4, 5]
TreeSet: [1, 2, 3, 4, 5]

我们可以通过以下方式将HashSet 转换为 TreeSet

  • 通过调用参数化构造函数并将哈希集的对象作为参数发送给它。
    1. 首先,我们必须为哈希集创建一个对象。
    2. 然后我们必须将所有元素添加到哈希集中。
    3. 最后,为树集创建一个对象并将哈希集对象发送给它。

    下面是上述方法的实现:

    程序:

    import java.util.HashSet;
    import java.util.Set;
    import java.util.TreeSet;
      
    public class GFG {
      
        public static void main(String[] args)
        {
      
            // Get the HashSet
            Set setobj = new HashSet<>();
            setobj.add("Welcome");
            setobj.add("To");
            setobj.add("Geeks");
            setobj.add("For");
            setobj.add("Geeks");
      
            System.out.println("HashSet: "
                               + setobj);
      
            // Convert the HashSet to TreeSet
            Set hashSetToTreeSet
                = new TreeSet<>(setobj);
      
            // Print the TreeSet
            System.out.println("TreeSet: "
                               + hashSetToTreeSet);
        }
    }
    
    输出:
    HashSet: [Geeks, For, Welcome, To]
    TreeSet: [For, Geeks, To, Welcome]
    
  • 通过使用 addAll 方法构造包含哈希集中存在的相同元素的树集。
    1. 首先,我们必须为哈希集创建一个对象。
    2. 然后我们必须将所有元素添加到哈希集中。
    3. 现在为 treeset 创建一个对象。
    4. 使用 addAll 方法将哈希集的所有元素添加到它。

    下面是上述方法的实现:

    程序:

    import java.util.HashSet;
    import java.util.Set;
    import java.util.TreeSet;
      
    public class GFG {
      
        public static void main(String[] args)
        {
      
            // Get the HashSet
            Set setobj = new HashSet<>();
            setobj.add("Welcome");
            setobj.add("To");
            setobj.add("Geeks");
            setobj.add("For");
            setobj.add("Geeks");
      
            System.out.println("HashSet: "
                               + setobj);
      
            // Convert the HashSet to TreeSet
            Set hashSetToTreeSet
                = new TreeSet<>();
            hashSetToTreeSet.addAll(setobj);
      
            // Print the TreeSet
            System.out.println("TreeSet: "
                               + hashSetToTreeSet);
        }
    }
    
    输出:
    HashSet: [Geeks, For, Welcome, To]
    TreeSet: [For, Geeks, To, Welcome]
    
  • 通过使用 for each 循环。 (此方法常用于两种不兼容类型之间的转换。)
    1. 首先,我们必须为哈希集创建一个对象。
    2. 然后我们必须将所有元素添加到哈希集中。
    3. 现在为 treeset 创建一个对象。
    4. 最后,通过使用 for each 循环将哈希集的所有元素添加到树集中。

    下面是上述方法的实现:

    程序:

    import java.util.HashSet;
    import java.util.Set;
    import java.util.TreeSet;
      
    public class GFG {
      
        public static void main(String[] args)
        {
      
            // Get the HashSet
            Set setobj = new HashSet<>();
            setobj.add("Welcome");
            setobj.add("To");
            setobj.add("Geeks");
            setobj.add("For");
            setobj.add("Geeks");
      
            System.out.println("HashSet: "
                               + setobj);
      
            // Convert the HashSet to TreeSet
            Set hashSetToTreeSet
                = new TreeSet<>();
            for (String i : setobj)
                hashSetToTreeSet
                    .add(i);
      
            // Print the TreeSet
            System.out.println("TreeSet: "
                               + hashSetToTreeSet);
        }
    }
    
    输出:
    HashSet: [Geeks, For, Welcome, To]
    TreeSet: [For, Geeks, To, Welcome]