java:Set对象TreeSet有序子类,HashSet无序子类,重复对象二
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
java:Set对象TreeSet有序⼦类,HashSet⽆序⼦类,重复对象
⼆
TreeSet有序⼦类;
HashSet⽆序⼦类
重复重复元素,Object对象是通过equals和hashCode来进⾏过滤的。
如果将上⼀篇提到中的例⼦中的TreeSet,换成HashSet,那么代码就不会过滤从的对象
HashSet⽆序⼦类,如何过滤重复的对象呢?(单个元素是可以过滤,但相同的对象不会)
Person:
public class Person implements Comparable<Person> {
private String name;
private int age;
public Person(String name, int age) {
= name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
= name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "姓名:" + name + ", 年龄:" + age + "";
}
public int compareTo(Person o) {
// TODO ⾃动⽣成的⽅法存根
if(this.age > o.age)
{
return 1;
}else if(this.age < o.age)
{
return -1;
}else{
//如果age年龄相同需要在判断name,是否重复
return pareTo( );
}
}
}
SetDemo3:
Set<Person> allSet = new HashSet<Person>();
allSet.add(new Person("张三",30));
//重复对象
allSet.add(new Person("张三",30));
allSet.add(new Person("李四",30));
allSet.add(new Person("王五",31));
allSet.add(new Person("赵六",31));
allSet.add(new Person("⽥七",32));
//重复对象
allSet.add(new Person("⽥七",32));
System.out.println(allSet);
输出结果:
[姓名:王五, 年龄:31, 姓名:⽥七, 年龄:32, 姓名:⽥七, 年龄:32, 姓名:张三, 年龄:30, 姓名:张三, 年龄:30, 姓名:李四, 年龄:30,姓名:赵六, 年龄:31]
这时需要过滤掉重复的对象,那么Person还需要复写equels,和HashCode两个⽅法,这两个⽅法作⽤了过滤重复的对象:
public int hashCode()
{
return .hashCode() * this.age;
}
public boolean equals(Object o)
{
if(this == o)
{
return true;
}
if( !(o instanceof Person) )
{
return false;
}
Person p = (Person) o;
if(.equals() && this.age == p.age)
{
return true;
}else{
return false;
}
}
执⾏的结果:
[姓名:赵六, 年龄:31, 姓名:李四, 年龄:30, 姓名:张三, 年龄:30, 姓名:王五, 年龄:31, 姓名:⽥七, 年龄:32]。