用SET存放对象
1.将以下三个Person类的对象放在一个HashSet中,由于HashSet不能存放重复的元素(姓名和身份证号都不能重复),所以在Person类中,需要覆盖hashCode()方法和equals()方法。这里给出重写方法的程序:
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (id != other.id)
return false;
return true;
}
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + id;
return result;
}
再创建一个Person对象:
能放入到刚才创建的HashSet中吗?通过这个对象来测试hashCode()方法和equals()方法的编写是否正确。
1.把集合中的元素打印出来(使用迭代器Iterator类)。
2.用TreeSet存放上面三个人,要求按照身份证号排序,打印出来。(注意使用TreeSet要实现Comparable接口,并覆盖compareTo()方法)
源代码
import java.util.HashSet;
import java.util.Iterator;
import java.util.TreeSet;
public class 别别别 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Person zhangsan=new Person();
zhangsan.name="张三";zhangsan.id="12310001";
Person lishi=new Person();
lishi.name="李四";lishi.id="12320002";
Person wangwu=new Person();
wangwu.name="王五";wangwu.id="12330003";
Person wangwu2=new Person();
wangwu2.name="王五";wangwu2.id="12330003";
HashSet<Person> set=new HashSet<Person>();
set.add(zhangsan);set.add(lishi);set.add(wangwu);
Iterator<Person> it=set.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
System.out.println("after add :");
set.add(wangwu2);
it=set.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
System.out.println("in the treeset:");
TreeSet<Person> tset=new TreeSet<Person>();
tset.add(zhangsan);tset.add(lishi);tset.add(wangwu);
Iterator<Person> it2=tset.iterator();
while(it2.hasNext())
{
System.out.println(it2.next());
}
}
}
class Person implements Comparable<Object>
{
String name;
String id;
@Override
public String toString() {
return "姓名:" + name +" 身份证号:" + id ;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
@Override
public int compareTo(Object arg0) {
// TODO 自动生成的方法存根
Person other=(Person)arg0;
return (id.compareTo(other.id));
}
}