在深入探讨实际差异之前,让我们了解它们的真正含义是什么?
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
免责声明:以上内容仅是站长个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。