0
点赞
收藏
分享

微信扫一扫

Java Set在插入的时候怎么去重的?


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


举报

相关推荐

0 条评论