HashSet 可以 TreeSet 不可以
常用的Set有HashSet和TreeSet。
@Test
public void testSet(){
Set<String> hashSet = new HashSet();
hashSet.add(null);
hashSet.add(null);
System.out.println(hashSet.size());
Set<String> treeSet = new TreeSet<>();
treeSet.add(null);
treeSet.add(null);
System.out.println(treeSet.size());
}
打印结果:
HashSet底层是HashMap,add方法调用的是HashMap的put方法,也只能有一个null。
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
TreeSet底层是TreeMap,add方法调用的是TreeMap的put方法,会报空指针异常。
HashSet底层是HashMap,可以有1个null的元素,TreeSet底层是TreeMap,不能有key为null的元素。