黑马程序员技术交流社区
标题:
关于ArrayList和HashSet
[打印本页]
作者:
崔政
时间:
2012-10-18 11:56
标题:
关于ArrayList和HashSet
在毕老师第14天的视频中,老师举了这么两个例子。名字分别是ArrayListTest2 和HashSetTest,不知道还有没有印象。
姓名和年龄相同为同一个人,重复元素。
首先是ArrayListTest2
/*
将自定义对象作为元素存到ArrayList集合中,并去除重复元素。
比如:存人对象,同姓名,同年龄视为同一个人,为重复元素
*/
import java.util.*;
class ArrayListTest2{
public static void main(String[] args){
Person p1=new Person("mike",18);
Person p2=new Person("mike",18);
Person p3=new Person("LiLiSi",19);
Person p4=new Person("LiLiSi",19);
Person p5=new Person("Jason",18);
Person p6=new Person("Tom",20);
ArrayList al=new ArrayList();
al.add(p1);
al.add(p2);
al.add(p3);
al.add(p4);
al.add(p5);
al.add(p6);
al=Chong(al);
for(int i=0;i<al.size();i++){
Person p_temp=(Person)al.get(i);
sop(p_temp.getName()+"..."+p_temp.getAge());
}
}
public static void sop(Object obj){
System.out.println(obj);
}
public static ArrayList Chong(ArrayList al){
ArrayList al2=new ArrayList();
for(int i=0;i<al.size();i++){
Person p1=(Person)al.get(i);
if(al2.isEmpty())
al2.add(p1);
else{
boolean flag=false;
for(int j=0;j<al2.size();j++){
Person p2=(Person)al2.get(j);
if(p2.equals(p1))
flag=true;
}
if(!flag){
al2.add(al.get(i));
}
}
}
return al2;
}
}
class Person{
private int age;
private String name;
Person(){}
Person(String name,int age){
this.name=name;
this.age=age;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
public boolean equals(Person per){
if(this.name.equals(per.name) && this.age==per.age)
return true;
else
return false;
}
}
复制代码
接下来是HashSetTest
class HashSetTest{
public static void main(String[] args){
HashSet hs=new HashSet();
hs.add(new Person("a1",11));
hs.add(new Person("a1",11));
hs.add(new Person("a2",12));
hs.add(new Person("a3",13));
hs.add(new Person("a4",14));
Iterator iter=hs.iterator();
while(iter.hasNext()){
Person p=(Person)iter.next();
sop(p.getName()+"..."+p.getAge());
}
}
public static void sop(Object obj){
System.out.println(obj);
}
}
class Person{
private int age;
private String name;
Person(){}
Person(String name,int age){
this.name=name;
this.age=age;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
public boolean equals(Object obj){
Person p=(Person)obj;
if(this.name.equals(p.name) && this.age==p.age)
return true;
else
return false;
}
public int hashCode(){
return name.hashCode()+age;//因为地址都相同,所以直接比较对象,而对象的方法也被重写
}
}
复制代码
在HashSetTest中,复写了equals方法,参数也是Obejct。如果换成了Person,就不是重写,就是重载了,所以无法取出同名同龄的Person。
而在ArrayListTest2中,我没有复写equals,而是重载了,但是却行的通,可以调用,这是为什么呢?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2