# `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

```