- /*
- 往hashset集合中存入自定义对象
- 姓名和年龄相同为同一人,取出重复元素
- */
- import java.util.*;
- class HashSetTest
- {
- public static void sop(Object obj)
- {
- System.out.println(obj);
- }
- public static void main(String[] args)
- {
- //定义hashset
- HashSet hs = new HashSet();
- //添加元素
- hs.add(new Person("a1",11));
- hs.add(new Person("a2",12));
- hs.add(new Person("a2",12));
- hs.add(new Person("a3",13));
-
- //迭代取出元素
- Iterator it = hs.iterator();
- while (it.hasNext())
- {
- //强转取出的元素
- Person p = (Person)it.next();
- //输出姓名和年龄
- sop(p.getName()+"..."+p.getAge());
- }
- }
- }
- class Person
- {
- //定义 姓名 年龄
- private String name;
- private int age;
- //构造函数
- Person(String name,int age)
- {
- this.name = name;
- this.age = age;
- }
- //复写hashCode方法
- public int hashCode()
- {
- //sop(this.name+"...hashCode");
- return name.hashCode()+age;
- }
- //复写equals方法
- public boolean equals(Object obj)
- {
- //判断传递的值是否是person类型
- //instanceof 对象是不是特定类的实例
- if(!(obj instanceof Person))
- return false;
- //强转 传递来的值
- Person p = (Person)obj;
- //返回 姓名 和年龄比较的结果
- return this.name.equals(p.name)&&this.age==p.age;
- }
- //获取名字的方法
- public String getName()
- {
- return name;
- }
- //获取年龄的方法
- public int getAge()
- {
- return age;
- }
- }
复制代码
Comparable接口和Comparator接口的区别:
Comparable 接口中是compareTo方法,compareTo方法中传递的是一个参数
Comparator接口中是compare方法,compare传递的是两个参数
实现Comparable接口,自定义类实现Comparable,让这个类创建的对象具备比较性,可以存储在TreeSet集合中。
实现Comparator接口,自定义实现Comparator,将这个类的对象传递给TreeSet集合的构造函数,让这个集合具备了比较性。
|