Set 和 List 的区别 | Java Debug 笔记

249 阅读2分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>

问题

Set<E>List<E> 接口之间的根本区别是什么?

回答

回答1

List 是一个有序的列表,而 Set 是一个无序的列表。

List<E>:

有序集合(也称为序列),使用该接口可以精确控制列表中每个元素的插入位置。可以通过其索引(列表中的位置)访问元素,并在列表中搜索元素。

Set<E>:

不包含重复元素的集合。更精确地说,集合中不包含元素 e1e2,使得e1.equals(e2),并且最多包含一个空元素。

回答2

有序列表(唯一或不唯一),实现接口 List,可以通过索引访问.

实现:

  • LinkedList
  • ArrayList

唯一元素的列表,实现接口 Set, 可以不通过索引访问。

实现:

  • HashSet(无序)
  • LinkedHashSet(有序)
  • TreeSet(按自然顺序或提供的比较器排序)

这两个接口 SetList 实现于 Collection

回答3

List

  1. 是元素的有序分组。
  2. 用于收集具有重复项的元素。
  3. 在List接口中有定义的新方法。

set

  1. 是元素的无序分组。
  2. Set 用于收集没有重复的元素。
  3. Set 接口内部没有定义新方法,因此我们仅需对 Set 子类使用 Collection 接口方法。

回答4

List

List 允许重复的元素和空值。使用元素的相应索引易于搜索,并且它将按插入顺序显示元素。

示例:(LinkedList

import java.util.*;

public class ListExample {

 public static void main(String[] args) {
    // TODO Auto-generated method stub

    List<Integer> l=new LinkedList<Integer>();
    l.add(001);
    l.add(555);
    l.add(333);
    l.add(888);
    l.add(555);
    l.add(null);
    l.add(null);

    Iterator<Integer> il=l.iterator();

    System.out.println(l.get(0));

    while(il.hasNext()){
        System.out.println(il.next());
    }

    for(Integer str : l){
        System.out.println("Value:"+str);
    }
 }

}

输出:

1
1
555
333
888
555
null
null
值:1
值:555
值:333
值:888
值:555
值:null
值:null

Set

Set 不允许任何重复的元素,并且允许单个 null值,它不能保证任何显示元素的顺序,仅TreeSet 可以以升序显示。

示例:(TreeSet

import java.util.TreeSet;

public class SetExample {

 public static void main(String[] args) {
    // TODO Auto-generated method stub

    TreeSet<String> set = new TreeSet<String>();
    try {
        set.add("hello");
        set.add("world");
        set.add("welcome");
        set.add("all");

        for (String num : set) {
            System.out.println( num);

        }
        set.add(null);
    } catch (NullPointerException e) {
        System.out.println(e);
        System.out.println("Set doesn't allow null value and duplicate value");
    }

 }

}

输出:

all
hello
welcome
world
java.lang.NullPointerException
Set doesn't allow null value and duplicate value

翻译内容来源Stack Overflow:stackoverflow.com/questions/1…