黑马程序员技术交流社区
标题:
迭代器 去除重复元素输出问题
[打印本页]
作者:
Johnny_Hu
时间:
2015-4-3 16:21
标题:
迭代器 去除重复元素输出问题
import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;
public class ArrayListDemo2
{
public static void main(String[] args)
{
ArrayList<Person> person = new ArrayList<Person>();
person.add(new Person("李鸿章",50));
person.add(new Person("袁世凯",52));
person.add(new Person("张作霖",60));
person.add(new Person("袁世凯",52));
person.add(new Person("张作霖",60));
person = singleElement(person);
Iterator al = person.iterator();
while (al.hasNext())
{
Person p = (Person) al.next();
System.out.println(p.toString());
}
}
public static ArrayList singleElement(ArrayList al)
{
ArrayList newArr = new ArrayList();
for(ListIterator li = al.listIterator();li.hasNext();)
{
Object obj = li.next();
if(!newArr.equals(obj))
newArr.add(obj);
}
return newArr;
}
}
class Person
{
private String name;
private int age;
Person(String name,int age)
{
this.name = name;
this.age = age;
}
public String toString()
{
return name+" "+age+"\t";
}
public boolean equals(Object obj)
{
if(!(obj instanceof Person))
{
return false;
}
Person p = (Person)obj;
return this.name.equals(p.name) && this.age == p.age;
}
}
复制代码
我这个貌似也没错 可是重复的元素一直输出 都要崩溃了
哪位高手可以帮我看下 代码哪里出错了 谢谢啊
作者:
艺多不压身丶
时间:
2015-4-3 16:30
class ArrayListDemo{
public static void main(String[] args){
ArrayList al=new ArrayList();
al.add(new Person("李四01",20));
al.add(new Person("李四03",23));
al.add(new Person("李四04",24));
al.add(new Person("李四02",22));
al.add(new Person("李四01",20));
al.add(new Person("李四03",23));
al.add(new Person("李四02",22));
al=singleElement(al);
Iterator it=al.iterator();
while(it.hasNext()){
Person p=(Person)it.next();
System.out.println(p.getName()+p.getAge());
}
}
public static ArrayList singleElement(ArrayList al){
ArrayList la=new ArrayList();
Iterator it=al.iterator();
while(it.hasNext()){
Object obj=it.next();
if(!la.contains(obj))
la.add(obj);
}
return la;
}
}
复制代码
用contains
作者:
Johnny_Hu
时间:
2015-4-7 22:15
艺多不压身丶 发表于 2015-4-3 16:30
用contains
可以了 谢谢啊 :)
作者:
夜班心桥
时间:
2015-4-8 00:24
其实,这个题,使用HashSet最简单,利用HashSet的元素不重复的特点。
import java.util.Set;
import java.util.HashSet;
public class HashSetTest
{
public static void main(String[] args)
{
Set<Person> person = new HashSet<Person>();
person.add(new Person("李鸿章",50));
person.add(new Person("袁世凯",52));
person.add(new Person("张作霖",60));
person.add(new Person("袁世凯",52));
person.add(new Person("张作霖",60));
for(Person p : person)
{
System.out.println(p);
}
}
}
class Person
{
private String name;
private int age;
Person(String name,int age)
{
this.name = name;
this.age = age;
}
public String toString()
{
return name+" "+age+"\t";
}
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result +age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
public boolean equals(Object obj)
{
if(!(obj instanceof Person))
{
return false;
}
Person p = (Person)obj;
return this.name.equals(p.name) && this.age == p.age;
}
}
复制代码
作者:
Johnny_Hu
时间:
2015-4-8 19:26
夜班心桥 发表于 2015-4-8 00:24
其实,这个题,使用HashSet最简单,利用HashSet的元素不重复的特点。
:)我之前没学到 这块 所以不知道 谢谢你啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2