HashSet的添加对象举例:
private int id;
public hashsetuser(String name, int id) {
this.id=id;
this.name=name;
}
public int hashCode() { //这里重写的hashcode方法,使其返回ID值,如果ID值一样,则调用equals()方法
return id;
}
public boolean equals(Object obj) {
if(obj==null)
return false;
if(obj instanceof hashsetuser) //判断obj是否为hashsetuser的对象
{
hashsetuser u =(hashsetuser) obj;
if(u.name.equals(this.name))
{
System.out.println("有相同对象,只能添加一个");
return true;
}
}
return false;
}
public String toString() {
return "这是"+this.name+":"+this.id;
}
public static void main(String[] args) {
hashsetuser hs3 =new hashsetuser("张三",3);
hashsetuser hs1 =new hashsetuser("张三",1);
hashsetuser hs2 =new hashsetuser("张三",1);
Set< hashsetuser> set =new HashSet<hashsetuser>();
set.add(hs1);
set.add(hs2);
set.add(hs3);
for (hashsetuser hashsetuser : set) { //使用foreach循环进行遍历
System.out.println( hashsetuser);
}
}
}
运行结果:
注解:
调setadd()函数时,往集合中新添加对象,先通过调hashcode()的方法,来获取hashcode值,然后根据hashcode值决定存储位置,如何hashcode()方法返回值相同,则调equals()方法进行比较。
在对象类里定义的obj就相当于在集合中的迭代器,每次新添加一个对象时,就进行对集合中已经添加进去的对象进行遍历,如果没找到就返回为false,找到了, 先看此时的obj的对象是否为hashsetuser 的对象,如果是,进行下面的每个值的判断。
TreeSet 的添加对象举例:
private String name;
private int id;
public treesetuser(String name,int id) {
this.id=id;
this.name=name;
}
public int compareTo(Object obj) {
if(obj==null)
return -1;
if(obj instanceof treesetuser) //判断obj是否为treesetuser的对象
{
treesetuser u =(treesetuser) obj;
if(u.name.equals(this.name))
return u.id-this.id;
}
return id;
}
public static void main(String[] args) {
Set<treesetuser> set =new TreeSet<treesetuser>();
treesetuser tt1=new treesetuser("王五", 3301);
treesetuser tt2=new treesetuser("王四", 3301);
treesetuser tt3=new treesetuser("王五", 3301);
set.add(tt1);
set.add(tt2);
set.add(tt3);
for (treesetuser treesetuser : set) { //这里使用foreach循环进行遍历输出
System.out.println(treesetuser);
}
}
}