黑马程序员技术交流社区
标题:
想ArrayList集合中存入自定义元素时碰到的问题
[打印本页]
作者:
雀巢咖啡
时间:
2014-5-25 18:49
标题:
想ArrayList集合中存入自定义元素时碰到的问题
我的代码如下:
import java.util.*;
class Student
{
private String name;
private int age;
Student(String name,int age)
{
this.name=name;
this.age=age;
}
public boolean equals(Object obj)//覆写Object中的equals方法
{
if(!(obj instanceof Student))
return false;
Student s=(Student)obj;
System.out.println(this.name+"...equals"+s.name);
return this.name.equals(s.name) && this.age==s.age;//判断name和age是否相同,都相同则为真,表明为同一个人。
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
class ListTest_1
{
public static void main(String[] args)
{
ArrayList al=new ArrayList();
al.add(new Student("sunyan1",20));
al.add(new Student("sunyan2",21));
al.add(new Student("sunyan1",20));
al=singleArr(al);
Iterator it=al.iterator();
while(it.hasNext())
{
Student s=(Student)it.next();
System.out.println(s.getName()+":::"+s.getAge());
}
}
public static ArrayList singleArr(ArrayList al)
{
ArrayList newAl=new ArrayList();
Iterator me=newAl.iterator();
while(me.hasNext())
{
Object obj=me.next();
if(!(newAl.contains(obj)))
{
newAl.add(obj);
}
}
return newAl;
}
public static void method(Object obj)
{
System.out.println(obj);
}
}
复制代码
问题1: 当调用了al=singleArr(al);时,输出结果时没有任何结果。而没有调用时却会输出结果。
问题2:输出结果显示Student类并没有自动调用其覆写的equals方法,因此也没有起到去重的功能。
作者:
为了明天
时间:
2014-5-25 19:04
本帖最后由 为了明天 于 2014-5-25 19:15 编辑
singleArr的方法写错了,应该迭代的是传进来的al;修改如下
public static ArrayList singleArr(ArrayList al)
{
ArrayList newAl=new ArrayList();
Iterator me=al.iterator();
while(me.hasNext())
{
//System.out.println("....");
Object obj=me.next();
if(!(newAl.contains(obj)))
{
newAl.add(obj);
}
}
return newAl;
}
打印结果为
sunyan2...equalssunyan1
sunyan1...equalssunyan1
sunyan1:::20
sunyan2:::21
之所以没有
sunyan1...equalssunyan2 是因为第一次执行的时候newAl中没有数据,contains不调用equals方法判断是否包含元素。
个人理解,不对见谅
作者:
TS__likewise
时间:
2014-5-25 20:18
楼上说得对,就是这句,你注意一下迭代
ArrayList newAl=new ArrayList();
Iterator me=newAl.iterator();
改过来
ArrayList newAl=new ArrayList();
Iterator me=al.iterator();
多注意就好了
作者:
成小龙
时间:
2014-5-25 22:39
public static ArrayList singleArr(ArrayList al)
59. {
60. ArrayList newAl=new ArrayList();
这是一个新集合 里面什么也没有
作者:
铁血丹心
时间:
2014-5-27 10:20
看懂了,学习了
作者:
DxxD
时间:
2015-3-27 10:29
。。。。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2