Set集合实现元素不重复原理
Posted Felx_chu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Set集合实现元素不重复原理相关的知识,希望对你有一定的参考价值。
众所周知,set内容不重复。以hashSet为例,会使用对象的hashCode()与equals()来判断存入的对象是否相同。流程如下:
要存入元素,内存中开设空间,每个空间都会有对应的Hash Code,这些空间成为哈希桶(Hash Bucket)。
对想要存入HashSet回调用对象的hashCode()获取对应的哈希值,并尝试放入对应的哈希桶中,如果哈希桶中没有对象,则直接放入,如果有,会再调用对象的equals()比较。
桶中的对象调用equals()与要传入的对象进行比较,若比较结果为false,则表示两个对象非重复,可以存入,若结果为true,表示两个对象相同,不可存入。
例:
学生类(Student),为了防止收集重复对象,在Student类中复写hashCode()和equals():
class Studen
private String name ;//姓名
private int age;//年龄
public int hashCode()
return name.hashCode()+age*33;
public boolean equals(Object obj)
if(!(obj instanceof Student))
throw new ClassCastException("类型不匹配");
Student s=(Student) obj;
return this.name.equals(s.name) &&this.age==s.age;
如果之后出现重复对象想要被收集时,要存入对象便会和已存在容器内的对象比较,如果相同则不能再存入。
以上是关于Set集合实现元素不重复原理的主要内容,如果未能解决你的问题,请参考以下文章