集合是一个不能包含重复元素的集合。它为数学集合抽象建模。
它不允许重复的元素,并且最多允许一个空值。
Set还为equals和hashCode操作的行为增加了更紧密的约定,从而即使它们的实现类型不同,也可以有意义地比较Set实例。
实现此接口的类共有三个-
HashSet-基于哈希表设置实现。
LinkedHashSet-基于链表的HashSet实现。
TreeSet-基于树设置实现。
根据定义,一个set对象不允许重复值,但最多允许一个空值。
HashSet中的空值-HashSet对象允许空值,但是,您只能向其中添加一个空元素。尽管您尝试打印其内容时添加了更多的空值,但它仅显示一个空值。
import java.util.HashSet; import java.util.Set; public class HashSetExample { public static void main(String args[]) { Set<Integer> hashSet = new HashSet<Integer>(); //Populating the HashSet hashSet.add(1124); hashSet.add(3654); hashSet.add(7854); hashSet.add(9945); System.out.println(hashSet); //Adding null elements hashSet.add(null); hashSet.add(null); hashSet.add(null); System.out.println(hashSet); } }
输出结果
[1124, 3654, 9945, 7854] [null, 1124, 3654, 9945, 7854]
LinkedHashSet中的空值:与HashSet对象一样,它也允许空值,但是,您只能向其中添加一个空元素。尽管您尝试打印其内容时添加了更多的空值,但它仅显示一个空值。
import java.util.LinkedHashSet; import java.util.Set; public class LinkedHashSetExample { public static void main(String args[]) { Set<Integer> linkedHashSet = new LinkedHashSet<Integer>(); //Populating the HashSet linkedHashSet.add(1124); linkedHashSet.add(3654); linkedHashSet.add(7854); linkedHashSet.add(9945); System.out.println(linkedHashSet); //Adding null elements linkedHashSet.add(null); linkedHashSet.add(null); linkedHashSet.add(null); System.out.println(linkedHashSet); } }
输出结果
[1124, 3654, 9945, 7854] [null, 1124, 3654, 9945, 7854]
TreeSet中的空值-TreeSet对象不允许空值,但是,如果尝试添加空值,则会在运行时异常生成。
import java.util.Set; import java.util.TreeSet; public class TreeSetExample { public static void main(String args[]) { Set<Integer> treeSet = new TreeSet<Integer>(); //Populating the HashSet treeSet.add(1124); treeSet.add(3654); treeSet.add(7854); treeSet.add(9945); System.out.println(treeSet); //Adding null elements treeSet.add(null); treeSet.add(null); treeSet.add(null); System.out.println(treeSet); } }
[1124, 3654, 7854, 9945] Exception in thread "main" java.lang.NullPointerException at java.util.TreeMap.put(Unknown Source) at java.util.TreeSet.add(Unknown Source) at MyPackage.TreeSetExample.main(TreeSetExample.java:16)