原文: https://javatutorial.net/java-treeset-example

Java TreeSet类是一个基于TreeMapNavigableSet实现。 元素可以通过Comparator进行排序,也可以仅通过其自然排序进行排序。 在复杂度方面,此实现为所有基本操作(例如添加,删除,包含)提供了log(n)时间成本。

Java `TreeSet`示例 - 图1

关于 Java 中的TreeSet的重要知识

  • TreeSet实现SortedSe接口,这意味着不允许重复值。
  • 异构对象不能插入TreeSet中,因为它不允许这样做。 它将在运行时引发classCastException
  • TreeSet类不保留元素的插入顺序,但是元素按其键排序。
  • TreeSet中的元素以升序和排序顺序存储。

Java 中TreeSet的局限性

  • 值必须是可比较的,或者需要在构造函数中提供比较器

TreeSet的简单说明

Java `TreeSet`示例 - 图2

继承图

TreeSet中的构造方法

  1. TreeSet():构造一个新的空树集,并根据其元素的自然顺序进行排序
  2. TreeSet(Collection<? extends E> c):构造一个新树集,该树集包含指定集合中的元素,并根据其元素的自然顺序对其进行排序。
  3. TreeSet(Comparator<? super E> comparator):构造一个空树集,该树集根据指定的比较器排序。
  4. TreeSet(SortedSet<E> s):构造一个与指定集合完全相同的新树集,包括元素的顺序。

TreeSet中的方法

  1. void add(Object o):根据TreeSet中的某些排序顺序添加指定的元素。 不会添加重复项。
  2. void clear():从树集中删除所有元素。
  3. boolean contains(Object o):如果树集中存在给定元素,则返回true,否则返回false
  4. Object first():返回树集中的第一个元素。
  5. Object last():返回树集中的最后一个元素。
  6. boolean isEmpty():如果树集不包含任何元素,则返回true,否则返回false
  7. Object clone():返回树集的浅表副本。
  8. int size():返回树集中的元素数量。
  9. Iterator iterator():返回用于迭代树集元素的迭代器。
  10. Comparator comparator():返回用于对TreeSet中的元素进行排序的Comparator

有关所有方法的文档,请访问 Oracle 官方文档页面

使用add()TreeSet中添加元素

语法:treeSet.add(Object o)

  1. import java.io.*;
  2. import java.util.TreeSet;
  3. public class TreeSetExample {
  4. public static void main(String args[])
  5. {
  6. TreeSet<String> animals = new TreeSet<String>();
  7. animals.add("Elephant");
  8. animals.add("Tiger");
  9. animals.add("Lion");
  10. System.out.println("TreeSet: " + animals);
  11. }
  12. }

输出

  1. TreeSet: [Elephant, Tiger, Lion]

使用first()last()获取TreeSet的第一个和最后一个元素

语法:

treeSet.first()

treeSet.last()

  1. import java.io.*;
  2. import java.util.TreeSet;
  3. public class TreeSetExample {
  4. public static void main(String args[])
  5. {
  6. TreeSet<String> animals = new TreeSet<String>();
  7. animals.add("Elephant");
  8. animals.add("Tiger");
  9. animals.add("Lion");
  10. System.out.println("TreeSet: " + animals);
  11. System.out.println("The first element: " + animals.first());
  12. System.out.println("The last element: " + animals.last());
  13. }
  14. }

输出

  1. TreeSet: [Elephant, Tiger, Lion]
  2. The first element: Elephant
  3. The last element: Lion

使用contains()检查元素是否在树集中

语法:treeSet.contains(Object element)

  1. import java.io.*;
  2. import java.util.TreeSet;
  3. public class TreeSetExample {
  4. public static void main(String args[])
  5. {
  6. TreeSet<String> animals = new TreeSet<String>();
  7. animals.add("Elephant");
  8. animals.add("Tiger");
  9. animals.add("Lion");
  10. System.out.println("TreeSet: " + animals);
  11. System.out.println("Is 'Cat' in the tree set?" + animals.contains("Cat"));
  12. System.out.println("Is 'Lion' in the tree set?" + animals.contains("Lion"));
  13. }
  14. }

输出

  1. TreeSet: [Elephant, Tiger, Lion]
  2. Is 'Cat' in the tree set? false
  3. Is 'Lion' in the tree set? true

使用remove()从树集中删除一个元素

语法:treeSet.remove(Object o)

  1. import java.io.*;
  2. import java.util.TreeSet;
  3. public class TreeSetExample {
  4. public static void main(String args[])
  5. {
  6. TreeSet<String> animals = new TreeSet<String>();
  7. animals.add("Elephant");
  8. animals.add("Tiger");
  9. animals.add("Lion");
  10. System.out.println("TreeSet: " + animals);
  11. animals.remove("Lion");
  12. animals.remove("Elephant");
  13. System.out.println("TreeSet: " + animals);
  14. }
  15. }

输出

  1. TreeSet: [Elephant, Tiger, Lion]
  2. TreeSet: [Tiger]

使用size()获取树集中的元素数量

语法:treeSet.size()

  1. import java.util.*;
  2. import java.util.TreeSet;
  3. public class TreeSetExample {
  4. public static void main(String args[])
  5. {
  6. TreeSet<String> animals = new TreeSet<String>();
  7. animals.add("Elephant");
  8. animals.add("Tiger");
  9. animals.add("Lion");
  10. System.out.println("TreeSet: " + animals);
  11. System.out.println("The size of the tree set is: " + animals.size());
  12. }
  13. }

输出

  1. TreeSet: [Elephant, Tiger, Lion]
  2. The size of the tree set is: 3

使用isEmpty()检查树集是否为空

语法:treeSet.isEmpty()

  1. import java.util.*;
  2. import java.util.TreeSet;
  3. public class TreeSetExample {
  4. public static void main(String args[])
  5. {
  6. TreeSet<String> animals = new TreeSet<String>();
  7. animals.add("Elephant");
  8. animals.add("Tiger");
  9. animals.add("Lion");
  10. System.out.println("TreeSet: " + animals);
  11. System.out.println("Empty: " + animals.isEmpty());
  12. animals.clear();
  13. System.out.println("Empty: " + animals.isEmpty());
  14. }
  15. }

输出

  1. TreeSet: [Elephant, Tiger, Lion]
  2. Empty: false
  3. Empty: true

使用Iterator()遍历树集

语法:

  1. Iterator iterator = ts.iterator();
  2. while (iterator.hasNext())
  3. System.out.print(iterator.next());
  1. import java.util.Iterator;
  2. import java.util.TreeSet;
  3. public class TreeSetExample {
  4. public static void main(String[] args)
  5. {
  6. TreeSet<String>
  7. animals = new TreeSet<String>();
  8. animals.add("Elephant");
  9. animals.add("Tiger");
  10. animals.add("Lion");
  11. Iterator<String> iterator = animals.iterator();
  12. System.out.println("TreeSet: ");
  13. System.out.println();
  14. while (iterator.hasNext())
  15. System.out.print(iterator.next()
  16. + "\n");
  17. }
  18. }

输出

  1. TreeSet:
  2. Elephant
  3. Tiger
  4. Lion

使用增强的for循环遍历树集

语法:

  1. for (String animal : animals)
  2. System.out.print(animal);
  3. }
  1. import java.util.Iterator;
  2. import java.util.TreeSet;
  3. public class TreeSetExample {
  4. public static void main(String[] args)
  5. {
  6. TreeSet<String>
  7. animals = new TreeSet<String>();
  8. animals.add("Elephant");
  9. animals.add("Tiger");
  10. animals.add("Lion");
  11. System.out.println("TreeSet: ");
  12. System.out.println();
  13. for (String animal : animals)
  14. System.out.print(animal + "\n");
  15. }
  16. }

输出

  1. TreeSet:
  2. Elephant
  3. Tiger
  4. Lion