黑马程序员技术交流社区
标题:
急,请问这是怎么回事?
[打印本页]
作者:
曾经的迷失
时间:
2014-5-28 15:43
标题:
急,请问这是怎么回事?
<font size="2">import java.util.*;
class Person
{
private String name;
private int age;
Person()
{}
Person(String name, int age)
{
this.setName(name);
this.setAge(age);
}
public void setName(String name)
{
this.name = name;
}
public void setAge(int age)
{
this.age = age;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
@Override
public boolean equals(Object obj)
{
if(obj.getClass()!=Person.class)
{
return false;
}
if(!(obj instanceof Person))
{
return false;
}
Person p = (Person)obj;
return this.name.equals(p.name) && this.age==p.age;
}
@Override
public int hashCode()
{
final int num = 8;
return name.hashCode()+age*8;
}
@Override
public String toString()
{
return "姓名:"+name+",年龄:"+age;
}
}
class ArrayListTest2
{
public static void main(String[] args)
{
//创建一个集合。
List<Person> list = new ArrayList<Person>();
//添加元素
list.add(new Person("老阳",26));
list.add(new Person("老洲", 25));
list.add(new Person("小黄",24));
list.add(new Person("小白",24));
list.add(new Person("老洲",25));
//创建一个迭代器
Iterator<Person> it = list.iterator();
System.out.println("为去除相同元素之前:");
//对元素进行迭代
while(it.hasNext())
{
System.out.println(it.next());
}
//返回一个没有重复元素的集合
List<Person> newlist = removeElement(list);
Iterator<Person> its = newlist.iterator();
System.out.println("为去除相同元素之后:");
while(its.hasNext())
{
System.out.println(its.next());
}
}
//去除相同的元素
public static List<Person> removeElement(List<Person> list)
{
List<Person> newlist = new ArrayList<Person>();
Iterator<Person> it = list.iterator();
while(it.hasNext())
{
Person p = it.next();
//新的集合没有包含有这个元素才往新集合中添加元素
if(!newlist.contains(p))
{
newlist.add(p);
}
/*
为什么这样写就不行呢?
if(!newlist.contains(it.next()))
{
newlist.add(it.next());
}
*/
}
return newlist;
}</font>
}
复制代码
问题在代码注释中。。求大神解答!!
作者:
tacyjay在路上
时间:
2014-5-28 18:25
本帖最后由 tacyjay在路上 于 2014-5-28 18:27 编辑
这个毕老师应该讲过,原理类似。
因为你在 if(!newlist.contains(it.next()))这一句判断时,it.next()已经指向了一个对象了,
当在下面 newlist.add(it.next());中添加时,it.next()这时会指向
另一个对象
,前后这两个对象
不是同一个对象
!
所以来说,不要连续使用.next()这个方法!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2