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());
    }

打印结果:

Untitled

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的元素。