Java Set在插入的时候怎么去重的?
Set是不重复的。List是重复的。
那么?Set是底层是怎么实现不重复的呢?
插入的时候去判定里面有没有相等的元素不就完了吗
怎么判定?
不就equals来就可以了!(如果你说用==来,估计要被笑话的)
set如果只是用equals方法,那效率太低了,每次都要调用。
有人发明了hash算法来提高集合查找效率。将集合分为许多个存储区域,每个对象====》hashCode
可以将hashCode分组,每组分别对应某个存储区域,根据一个对象的hashCode可以知道你在哪区域。
hashCode方法:它返回的就是根据对象的内存地址换算出的一个值。
当set集合要添加新元素时,先调用这个元素的hashCode,定位到它应该放置的物理位置,如果这个位置没有元素,他就是可以直接存储在这里,如果有的话,再来用equals与新元素进行比较,这样就减少调用equals方法,从而提高效率。
源码看set常用方法
();
boolean isEmpty();
boolean contains(Object o);
Iterator<E> iterator();
Object[] toArray();
boolean add(E e);
boolean remove(Object o);
boolean containsAll(Collection<?> c);
boolean addAll(Collection<? extends E> c);
void clear();
boolean equals(Object o);
int hashCode();