# Java 中`List`和`Set`之间的区别

> 原文： [https://beginnersbook.com/2014/07/difference-between-list-and-set-in-java/](https://beginnersbook.com/2014/07/difference-between-list-and-set-in-java/)

`List`和`Set`都是接口。它们都扩展了`Collection`接口。在这篇文章中，我们讨论了 java 中`List`和`Set`接口之间的**差异。**

## `List` Vs `Set`

1）`List`是一个有序集合，它维护插入顺序，这意味着在显示列表内容时，它将按照它们插入列表的顺序显示元素。

`Set`是一个无序集合，它不保持任何顺序。 维护顺序的`Set`很少，例如`LinkedHashSet`（它按插入顺序维护元素）。

2）`List`允许重复，而`Set`不允许重复元素。如果您尝试将重复元素插入`Set`中，它将替换现有值，则`Set`的所有元素都应该是唯一的。

3）`List`实现： [`ArrayList`](https://beginnersbook.com/2013/12/java-arraylist/) ， [`LinkedList`](https://beginnersbook.com/2013/12/linkedlist-in-java-with-example/)等。

`Set`实现： [`HashSet`](https://beginnersbook.com/2013/12/hashset-class-in-java-with-example/)， [`LinkedHashSet`](https://beginnersbook.com/2013/12/linkedhashset-class-in-java-with-example/)， [`TreeSet`](https://beginnersbook.com/2013/12/treeset-class-in-java-with-example/) 等。

4）`List`允许任意数量的空值。 `Set`最多只能有一个空值。

5） [`ListIterator`](https://beginnersbook.com/2014/06/listiterator-in-java-with-examples/)可用于在两个方向（前向和后向）遍历`List`但是它不能用于遍历`Se`。我们可以使用[迭代器](https://beginnersbook.com/2014/06/java-iterator-with-examples/)（它也适用于`List`）来遍历一个`Set`。

6）`List`接口有一个名为[`Vector`](https://beginnersbook.com/2013/12/vector-in-java/) 的遗留类，而`Set`接口没有任何遗留类。

## 何时使用`Set`和何时使用`List`？

用法完全取决于要求：

如果要求只有唯一值，那么`Set`是您最好的选择，因为`Set`的任何实现仅维护唯一值。

如果需要维持插入顺序而不管双重性，则`List`是最佳选择。`List`接口的实现 - `ArrayList`和`LinkedList`按其插入顺序对元素进行排序。

#### 列表示例

```java
import java.util.List;
import java.util.ArrayList;
import java.util.LinkedList;

public class ListExample {

 public static void main(String[] args) {
   List<String> al = new ArrayList<String>();
   al.add("Chaitanya");
   al.add("Rahul");
   al.add("Ajeet");
   System.out.println("ArrayList Elements: ");
   System.out.print(al);

   List<String> ll = new LinkedList<String>();
   ll.add("Kevin");
   ll.add("Peter");
   ll.add("Kate");
   System.out.println("\nLinkedList Elements: ");
   System.out.print(ll);
 }
}
```

**输出：**

```java
ArrayList Elements: 
[Chaitanya, Rahul, Ajeet]
LinkedList Elements: 
[Kevin, Peter, Kate]
```

#### 设置示例

```java
import java.util.Set;
import java.util.HashSet;
import java.util.TreeSet;

public class SetExample {

  public static void main(String args[]) { 
    int count[] = {11, 22, 33, 44, 55};
    Set<Integer> hset = new HashSet<Integer>();
    try{
      for(int i = 0; i<4; i++){
         hset.add(count[i]);
      }
      System.out.println(hset);

      TreeSet<Integer> treeset = new TreeSet<Integer>(hset);
      System.out.println("The sorted list is:");
      System.out.println(treeset);
    }
    catch(Exception e){
        e.printStackTrace();
    }
  }
}
```

**输出：**

```java
[33, 22, 11, 44]
The sorted list is:
[11, 22, 33, 44]
```