在深入探讨实际差异之前,让我们了解它们的真正含义是什么?

Set是什么?

我们已经在数学中遇到了集合的概念,这里的集合或多或少意味着相同。是的,它是元素的集合,在大多数情况下,是相似元素的集合。可以尝试将这些元素添加到Set中,然后尝试打印以了解其实际存储方式。

输入一组:20,50,10,30。
它实际上存储在Set中为:10,20,30,50。

元素在此处排序,并且不按其插入顺序存储。这是Set的功能之一,它总是在存储之前对元素进行排序,当然,它也有例外,其中之一就是LinkedhashSet,因为它可以保持元素的插入顺序。

用计算机术语来说,“集合”包括一些其他属性,例如“方法”和“继承”。方法就像函数一样,它们执行某些任务,例如添加,删除或遍历元素集。我们大多数人都对继承一词很熟悉,在这里它的含义也一样。是的,我们可以从其Collection继承一个Method,以便可以与Set Interface一起使用。我们再次在谈论一个新术语,即Set接口,它不过是包括方法在内的整个元素集。

如何执行?

为了更好地理解,我们用Set的语法表示了Set。从以下语法中,可以识别Set的不同类型,例如HashSet和TreeSet。

import java.util.*;
public class Setexample {

public static void main(String args[]) {

    int count[] = {34, 22,10,60,30,22}{25, 17, 76, 12, 88, 57};
    Set<Integer> set = new HashSet<Integer>();
    try {
        for(int i = 0; i < 5; i++) {
            set.add(count[i]);
        }

        System.out.println(set);
        TreeSet sortedSeteg = new TreeSet<Integer>(set);
        System.out.println(“Here we have the sorted output:”);
        System.out.println(sortedSeteg);
        System.out.println(“Look at the First element: “+ (Integer)sortedSet.first());
        System.out.println(“Look at the last element: “+  (Integer)sortedSet.last());
    }catch(Exception e) {}

    }
}

执行上面示例代码,得到以下结果:

[25, 17, 76, 12, 88]
Here we have the sorted output:
[12, 17, 25, 76, 88]
Look at the First element: 12
Look at the last element: 88

List是什么?

List扩展了Collection的方式类似于Set的方式,但是它保持了插入的顺序。尝试将以下名称添加到列表中,然后查看如何添加到列表中。

列表的输入:John,Nancy,Mary,Alice。
如何将其存储在列表中:John,Nancy,Mary和Alice。

只要注意它们的插入顺序即可。可以确定“John”是输入和输出中的第一个元素,并且其后跟插入名称的顺序相同。 我们甚至可以认为这是List的主要属性之一。

如何执行?
让我们看一下下面语法中的一些List方法,例如ArrayList和LinkedList。

import java.util.*;
public class Collectionssample {

public static void main(String[] args) {

    List a1 = new ArrayList();
    a1.add(“John”);
    a1.add(“Nancy”);
    a1.add(“Mary”);
    a1.add(“Alice”);
    System.out.println(”ArrayList Elements are”);
    System.out.print(“	” + a1);

    List l1 = new LinkedList();
    l1.add(“Silvia”);
    l1.add(“Arjun”);
    l1.add(“Deepika”);
    l1.add(“Susan”);
    System.out.println();
    System.out.println(” LinkedList Elements are”);
    System.out.print("	" + l1);   
    }
}

以上语法的输出如下:

ArrayList Elements are
[John, Nancy, Mary, Alice]
LinkedList Elements
[Silvia, Arjun, Deepika, Susan]

从上面的代码很清楚,ArrayList和LinkedList都保持插入顺序。

插入顺序维护:

Set从不维护将元素插入其中的顺序,而List则保持它的顺序。 LinkedHashSet的此规则有一个例外,因为它保持插入顺序,但是其他Set(例如HashSet和TreeSet)在存储元素之前会对元素进行排序。下面的示例对此进行了描述。

Set输入:Cat, Doll, Apple.
排序后为:Apple, Cat, Doll.

List输入:Cat, Doll, Apple.
排序后为: Cat, Doll, Apple.

存在重复项:
Set永远不允许重复,而List则允许重复。 如果必须将重复值添加到列表中,那么它将被覆盖。
Set输入: 10, 20, 20, 50.
排序后为:10, 20, 50.

List输入:10, 20, 20, 50.
排序后为:10, 20, 20, 50.

Null值

Set只能有一个Null值,而列表可以有多个空值,并且不限于任何数字。

Set输入: null, null, Man, Dog, Plane.
存储为: null, Dog, Man, Plane.

List输入:null, null, Man, Dog, Plane.
存储为: null, null, Man, Dog, Plane.

Iterator方法与Set和List都可以很好地工作,而ListIterator方法仅与List一起工作。 ListIterator可用于在列表中前后移动。

传统类的存在:
Set没有旧类,而List接口具有称为“vector”的旧版。Vector使用List接口,因此可以保持插入顺序。 由于同步的努力,矢量在添加,删除和更新上的性能几乎没有变慢。

实现方式:
Set的实现很少有HashSet,LinkedHashSet和TreeSet。 List的很少实现包括ArrayList和LinkedList。

何时使用Set和List

Set和List的使用完全取决于维护插入顺序的要求。 正如我们已经了解到的那样,Set从不维护插入顺序,因此在顺序不那么重要时可以使用它。 同样,在需要保持插入顺序时也可以使用List。

比较项 Set List
插入顺序 它保持插入顺序。不管其值如何,第一个插入的内容始终保留在第一位。 它不维护插入顺序。
方法 常用方法:add(), clear(), contains(), isEmpty(), remove() and size() 常用方法:add(), addAll(), get(), lastIndexOf(), ListIterator(), remove(), set()和subList()
重复项 它不允许重复,在这种情况下值将被覆盖。 允许重复
Null值 最多只能有一个NULL值。 可以有多个NULL值。
迭代方法 仅使用方法iterator()。 它同时使用了iterator()和listIterator()
传统类的存在 没有 有,vector类
实现 Set接口的实现有:HashSet,LinkedHashSet和TreeSet。 List接口的实现的是:LinkedList和ArrayList。
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:Set和List
本文链接:https://www.vsdiffer.com/vs/set-vs-list.html
免责声明:以上内容仅是站长个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。