💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# `HashSet`和`TreeSet`之间的区别 > 原文: [https://beginnersbook.com/2014/08/difference-between-hashset-and-treeset/](https://beginnersbook.com/2014/08/difference-between-hashset-and-treeset/) 在本文中,我们将讨论`HashSet`和`TreeSet`之间的差异。 ## `HashSet`与`TreeSet` 1) [`HashSet`](https://beginnersbook.com/2013/12/hashset-class-in-java-with-example/)比[`TreeSet`](https://beginnersbook.com/2013/12/treeset-class-in-java-with-example/)为`add`,`remove`,`contains`,`size`等操作提供更好的性能(更快)。`HashSet`提供恒定的时间成本,而对于这样的操作`TreeSet`提供`log(n)`时间成本。 2)`HashSet`不维护任何元素顺序,而`TreeSet`元素默认按升序排序。 **相似之处**: 1)`HashSet`和`TreeSet`都不包含重复元素,这意味着它们都是重复的。 2)如果你想要一个有序的`Set`,那么最好将元素添加到`HashSet`然后[将其转换为`TreeSet`](https://beginnersbook.com/2014/08/how-to-convert-a-hashset-to-a-treeset/) ,而不是创建一个`TreeSet`并向其添加元素。 3)这两个类都是非同步的,这意味着它们不是线程安全的,并且在需要线程安全操作时应该显式同步。 **例子:** #### `HashSet`示例 ```java import java.util.HashSet; class HashSetDemo{ public static void main(String[] args) { // Create a HashSet HashSet<String> hset = new HashSet<String>(); //add elements to HashSet hset.add("Abhijeet"); hset.add("Ram"); hset.add("Kevin"); hset.add("Singh"); hset.add("Rick"); // Duplicate removed hset.add("Ram"); // Displaying HashSet elements System.out.println("HashSet contains: "); for(String temp : hset){ System.out.println(temp); } } } ``` **输出:** ```java HashSet contains: Rick Singh Ram Kevin Abhijeet ``` #### `TreeSet`示例 ```java import java.util.TreeSet; class TreeSetDemo{ public static void main(String[] args) { // Create a TreeSet TreeSet<String> tset = new TreeSet<String>(); //add elements to TreeSet tset.add("Abhijeet"); tset.add("Ram"); tset.add("Kevin"); tset.add("Singh"); tset.add("Rick"); // Duplicate removed tset.add("Ram"); // Displaying TreeSet elements System.out.println("TreeSet contains: "); for(String temp : tset){ System.out.println(temp); } } } ``` **输出:**元素按升序排序。 ```java TreeSet contains: Abhijeet Kevin Ram Rick Singh ```