Set和List有什么区别?

Joh*_*nna 395 java list set

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

And*_*are 489

List是一个有序的元素序列,而是Set一个无序的元素列表(谢谢你,奎因泰勒).

List<E>:

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

Set<E>:

不包含重复元素的集合.更正式地说,集合不包含元素对e1和e2,使得e1.equals(e2)和至多一个null元素.正如其名称所暗示的,该界面模拟数学集抽象.

  • 是的,Java Set CAN BUT并非必须订购.是的,如果你有一个TreeSet,你可以指望它被订购.但你必须知道你有一个TreeSet而不仅仅是一个Set.如果您返回了一个Set,则不能依赖于它的订购.另一方面,列表按其性质排序,必须订购列表的任何实现.因此,根据接口定义的条款,说Set是无序的并不是特别错误,但是说Set不能保证元素顺序在技术上更正确. (44认同)
  • 可以订购一套,所以这个答案的第一个陈述是误导性的,即使当然必须选择一个列表来强制执行收集命令 (33认同)
  • 错误!可以订购Java集,具体取决于实现; 例如,Java TreeSet是有序的.在Java的上下文中,List和Set之间的唯一区别是Set包含唯一项.在数学的上下文中,集合的项目是唯一且无序的. (24认同)
  • 不要将"有序"与"已排序"混为一谈.同样,不要混淆接口的合同和接口的实现.说"无序"的东西没有顺序也是错误的,它只是意味着没有关于订单执行的保证(并且调用之间的顺序可能不稳定,与有序列表不同). (13认同)
  • 对于SortedSet,没有两个元素compareTo()== 0,因为不调用equals. (7认同)
  • 说Set(在Java中)是无序的是错误的,因为它"保证"集合没有订单.如果您对集合的所有了解都是其元素是有序的,则无法区分该集合是Set还是List.通过说Set是无序的,暗示有序元素的集合不能是Set,这是不正确的. (3认同)

Ser*_*hyk 217

??????????????????????????????????????????????????????????????????????????
?                   ?         List         ?            Set              ?
??????????????????????????????????????????????????????????????????????????
?     Duplicates    ?          YES         ?            NO               ?
??????????????????????????????????????????????????????????????????????????
?       Order       ?       ORDERED        ?  DEPENDS ON IMPLEMENTATION  ?
??????????????????????????????????????????????????????????????????????????
? Positional Access ?         YES          ?            NO               ? 
??????????????????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

  • 有一点需要注意:位置访问性能在很大程度上取决于底层实现,阵列与链接列表http://stackoverflow.com/questions/322715/when-to-use-linkedlist-over-arraylist (2认同)
  • 如果不是通过位置访问,如何对 Set 进行索引?(ASCII 表+1) (2认同)

iva*_*off 69

有序的元素列表(唯一或不唯一)
符合Java的接口名称List
可以通过索引访问

实施使用

  • 链表
  • 数组列表

独特的元素列表:
顺应名为Java的接口Set
可以通过索引访问

实施使用

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

这两种接口SetList符合Java的接口命名Collection


Pet*_*ter 27

List可以包含重复元素.List(在Java中)也意味着顺序.


Har*_*guy 16

  • 列表是有序的项目分组
  • 集合是一个无序的项目分组,不允许重复(通常)

从概念上讲,我们通常指的是一个无序的分组,允许重复作为一个Bag,并且不允许重复是一个Set.

  • 集合不能有重复项。 (2认同)

小智 10

名单

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

  1. 是无序的元素分组.
  2. Set用于收集没有重复的元素.
  3. 在Set接口中没有定义新方法,因此我们必须仅将Collection接口方法与Set子类一起使用.


小智 9

列表:

List通常允许重复的对象. List必须订购s,因此可以通过索引访问.

实现类包括:ArrayList,LinkedList,Vector

组:

Set就做允许重复的对象.大多数实现都是无序的,但它是特定于实现的.

实现类包括:( HashSet无序), LinkedHashSet(有序), TreeSet(按自然顺序或按提供的比较器排序)


小智 8

列表:
列表允许重复元素和空值。使用元素的相应索引易于搜索,并且它会按插入顺序显示元素。示例:(链表)

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);
    }
 }

}
Run Code Online (Sandbox Code Playgroud)

输出:

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

Set:
Set 不允许任何重复元素,它允许单个空值。它不会保持任何显示元素的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");
    }

 }

}
Run Code Online (Sandbox Code Playgroud)

输出:

所有
你好
欢迎
世界
显示java.lang.NullPointerException
设置不允许空值和重复值


小智 8

因素 列表
分组元素是有序的吗? 是的
通过索引提供位置访问? 是的
可以存储重复元素吗? 是的
可以存储多个null元素吗? 是的
蔡尔兹: ArrayListLinkedListVector, 和Stack HashSetLinkedHashSet


Ous*_*ama 8

ListSet都是接口。它们都扩展了 Collection 接口。集合和列表之间的重要区别是:

\n
    \n
  1. 重复对象
  2. \n
\n

ListSet之间的主要区别在于List允许重复,而 Set 不允许重复。

\n
    \n
  1. 命令
  2. \n
\n

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

\n

Set是一个无序集合,它不保持任何顺序。很少有Set的实现可以维护顺序,例如LinkedHashSet(它按插入顺序维护元素)。

\n
    \n
  1. 空元素
  2. \n
\n

列表允许任意数量的空元素Set最多只能有一个null 元素。

\n


Chr*_*ssy 7

在我们谈论Java接口时,为什么不看看Javadoc?

  • A List是有序集合(序列),通常允许重复
  • 一个Set一个的集合,不包含重复元素,迭代顺序可以通过实施保障

关于集合的缺乏顺序没有提及:它取决于实现.

  • 正确.LinkedHashSet包含按插入顺序排列的元素. (2认同)

Qui*_*lor 5

集合是一组无序的不同对象 - 不允许重复的对象.它通常使用要插入的对象的哈希码来实现.(具体实现可能会添加排序,但Set接口本身不会.)

列表是一组有序的对象,可能包含重复项.它可以与实施ArrayList,LinkedList等等.

  • **有序**是输入数据的排列方式与用户输入完全相同,而**排序**是输入数据按字典顺序或上升/下降顺序排列(以整数值表示).**无序**表示输入数据可能或可能不存储在用户输入的订单中. (4认同)

Jer*_*gen 5

这可能不是您正在寻找的答案,但集合类的JavaDoc实际上非常具有描述性.复制/粘贴:

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

与集合不同,列表通常允许重复元素.更正式地,列表通常允许元素对e1和e2成为e1.equals(e2),并且如果它们根本允许空元素,则它们通常允许多个空元素.有人可能希望通过在用户尝试插入运行时异常时抛出运行时异常来实现禁止重复的列表,这是不可想象的,但我们希望这种用法很少见.