hashmap 允许存在一个null值,重复元素覆盖
当插入空值时直接去遍历table[0]Entry链表,寻找e.key==null的Entry或者没有找到遍历结束如果找到了e.key==null,就保存null值对应的原值oldValue,然后覆盖原值,并返回oldValue ,如果在table[0]Entry链表中没有找到就调用addEntry方法添加一个key为null的Entry。
HashSet 允许一个null,重复元素不会被插入
实现了Set接口,它不允许集合中有重复的值,当我们提到HashSet时,第一件事情就是在将对象存储在HashSet之前,要先确保对象重写equals()和hashCode()方法,这样才能比较对象的值是否相等,以确保set中没有储存相等的对象。如果我们没有重写这两个方法,将会使用这个方法的默认实现。
treemap 插入元素通过比较器比较,不要插null
中对于存储进TreeMap及TreeSet中的元素,要求元素自身具有比较性或者在创建集合时传入一个比较器对象。当调用TreeMap.put(key,value)时,如果root为空,也就是集合中没有元素时,不管key值是否为null,TreeMap都创建一个节点并将该节点作为树根节点存入集合中。当第二次存入key为null的键值对时,此时如果集合自身不带比较器,那么调用元素自身的compareTo()方法,即key.compareTo()方法,此时必然产生NullPointerException异常。
treeset 同上
同 treemap 允许第一个元素为null,再插入要compareTo报错。