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

有帮助吗?

解决方案

List是一个有序的元素序列,而Set是一个不同的元素列表(谢谢,奎因泰勒)。

List<E>:

  

有序集合(也称为   序列)。此界面的用户   精确控制在哪里   列表中插入了每个元素。该   用户可以通过他们访问元素   整数索引(列表中的位置),   并搜索列表中的元素。

Set<E>:

  

包含否的集合   重复元素。更正式的,   集合不包含元素对e1   和e2使得e1.equals(e2)和at   大多数一个null元素。正如所暗示的那样   它的名字,这个界面模型   数学集抽象。

其他提示

╔═══════════════════╦══════════════════════╦═════════════════════════════╗
║                   ║         List         ║            Set              ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║     Duplicates    ║          YES         ║            NO               ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║       Order       ║       ORDERED        ║  DEPENDS ON IMPLEMENTATION  ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Positional Access ║         YES          ║            NO               ║ 
╚═══════════════════╩══════════════════════╩═════════════════════════════╝

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

实现使用

  • 链表
  • 数组列表

独特元素列表:
符合Java的接口命名 Set
不是 通过索引访问

实现使用

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

两个接口 SetList 符合Java的接口命名 Collection

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

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

从概念上讲,我们通常将允许重复的无序分组称为 Bag,而不允许重复的分组称为 Set。

<强>列表

  1. 是元素的有序分组。
  2. 列表用于收集带有重复项的元素。
  3. 在List中定义了新方法 接口
  4. 设置

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

列表:

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

实施类包括:LinkedListVectorSet

设置:

HashSet s 允许重复的对象。 大多数实现都是无序的,但它是特定于实现的。

实施类包括:  LinkedHashSet(无序),  TreeSet(订购),  <=>(按自然顺序或提供的比较器排序)

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

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

没有提到关于集合缺乏顺序:这取决于实施。

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

  

有序集合(也称为   序列)。此界面的用户   精确控制在哪里   列表中插入了每个元素。该   用户可以通过他们访问元素   整数索引(列表中的位置),   并搜索列表中的元素。

     

与集合不同,列表通常允许   重复元素。更正式的,   列表通常允许成对   元素e1和e2这样   e1.equals(e2),它们通常是   允许多个null元素   允许null元素。它不是   不可想象有人可能希望   实施禁止的列表   重复,通过投掷运行时   用户尝试时的异常   插入它们,但我们希望这种用法   很少见。

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

列表是一组有序的对象,可能包含重复项。它可以用ArrayListLinkedList等实现

1.List允许重复值并设置不允许重复

2.List维护您将元素插入列表的顺序 设置没有维持秩序。 3.List是有序的元素序列,而Set是无序的元素列表。

列出与设置

1)Set不允许重复。列表允许重复。基于Set的实现,它还维护插入顺序。

例如:LinkedHashSet。它维护插入顺序。请参考点击此处

2)包含方法。根据Set的性质,它将提供更好的访问性能。最好的情况是o(1)。但是List有调用contains的性能问题。

<强>列表:结果 List允许重复元素和空值。易于使用元素的相应索引进行搜索,并且还将按插入顺序显示元素。 例如:(链表)

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个结果 空结果 空结果 价值:1,点击 价值:555点击 价值:333点击 价值:888点击 价值:555点击 价值:无效点击 值:空结果

设置:结果 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");
    }

 }

}

输出:

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

所有List类都维护插入顺序。它们基于性能和其他特征使用不同的实现(例如,ArrayList用于特定索引的访问速度,LinkedList用于简单维护订单)。由于没有密钥,因此允许重复。

Set类不维护广告订单。它们可以选择强制执行特定的顺序(与SortedSet一样),但通常具有基于某些散列函数的实现定义顺序(与HashSet一样)。由于<=> s是按键访问的,因此不允许重复。

订购......列表有订单,订单则没有。

Java中List和Set之间的值得注意的差异如下:

1) Java中List和Set之间的基本区别是允许重复元素。 Java中的列表允许重复,而Set不允许任何重复。如果在Set中插入副本,它将替换旧值。任何Set in Java的实现都只包含唯一的元素。

2) Java中List和Set之间的另一个显着差异是顺序。列表是有序集合,而集合是无序集合。 List维护元素的插入顺序,意味着之前插入的任何元素将比下面插入的任何元素的索引更低。在Java中设置不保持任何顺序。尽管Set提供了另一个名为SortedSet的替代方案,它可以按照存储在Set中的对象的Comparable和Comparator方法定义的特定排序顺序存储Set元素。

3) Java中List接口的流行实现包括ArrayList,Vector和LinkedList。虽然流行的Set接口实现包括HashSet,TreeSet和LinkedHashSet。

很明显,如果您需要维护插入顺序或对象,并且您的集合可以包含重复项,那么List是一种方法。另一方面,如果您的要求是保持唯一的集合而没有任何重复,那么就是设置。

列表:

  1. 允许重复。
  2. 在分组元素中有序。(换句话说,有明确的顺序。不需要按升序排序)
  3. 集:

    1. 不允许重复。
    2. 在分组元素中无序。(换句话说,没有明确的顺序。它可能会或可能不会按升序排列)

Set<E>List<E>都用于存储E类型的元素。区别在于Set以无序方式存储,不允许重复值。 List用于以有序方式存储元素,它允许重复值。

索引位置无法访问

<=>元素,并且可以使用索引位置访问<=>元素。

嗨,已经给出了很多答案。让我指出一些到目前为止尚未提及的要点:

  • 大多数列表实现(ArrayList、Vector) 实施 RandomAccess 接口是一个用于更快访问的标记接口。Set 实现都没有这样做。
  • List 使用一种特殊的迭代器,称为 ListIterator 支持双向迭代. 。Set 使用 Iterator ,仅支持 1 路迭代
  • HashSet 需要 内存增加 5.5 倍 比存储相同数量的元素的arraylist。

这是一个 groovy 的清晰示例。我创建了一个集合和一个列表。然后我尝试在每个列表中存储 20 个随机生成的值。生成的值可以在 0 到 5 的范围内

s = [] as Set
l = []

max = 5
print "random Numbers :"
20.times{
e = (int)Math.random()*max
s << e
l << e
print "$e, "
}


println "\n"
println "Set : $s "
println "list : $l

结果 :

随机数: 4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3

放 : [4, 1, 0, 2, 3]

列表 : [4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3]

你可以看到区别在于:

  • Set 不允许重复值。
  • 列表允许重复值。

与SET没有重复值和List可以的答案一样。 当然,秩序是另一回事,让他们分开。

设置: 集合的集合中不能包含重复元素。它也是一个无序的集合。要从Set访问数据,只需要使用Iterator,并且无法使用基于索引的检索。它主要用于需要唯一性收集时。

<强>列表: List可以有重复的元素,插入时自然排序。 因此,它可以基于索引或迭代器检索数据。它广泛用于存储需要基于索引访问的集合。

主题名称:列表VS集

我刚刚学习了Java最重要的主题,名为Collections Framework。我想与你分享我对收藏的一些知识。列表,设置,地图是它最重要的主题。所以让我们从List和Set开始。

List和Set之间的区别:

  1. List是一个扩展AbstractList类的集合类,其中Set是一个扩展AbstractSet类但都实现Collection接口的集合类。

  2. 列表界面允许重复值(元素),而Set界面不允许重复值。如果Set中有重复元素,则会替换旧值。

  3. List接口允许NULL值,而Set接口不允许Null值。如果在Set中使用Null值,则给出NullPointerException

  4. 列表界面维护广告订单。这意味着我们在List中添加元素的方式与使用迭代器或for-each样式获取元素的方式相同。而Set实现不一定保持插入顺序。 (虽然SortedSet使用TreeSetLinkedHashSet维护广告订单顺序)。

  5. List接口有自己定义的方法,而Set接口没有自己的方法,所以Set只使用Collection接口方法。

  6. List接口有一个名为Vector的遗留类,而Set接口没有任何遗留类

  7. 最后但并非最不重要...... listIterator()方法只能用于遍历List Classes中的元素,而我们可以使用iterator()方法来访问Set类元素

  8. 我们可以添加其他任何内容吗?请告诉我。

    感谢。

设置:

不能有重复的值 订购取决于实施。默认情况下,它不是订购的 无法按索引访问

<强>列表:

可以有重复的值 默认排序 可以按索引访问

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top