package myclass;
import java.util.;
/
将自定义对象作为元素存到ArrayList集合中,并去除重复元素。
比如:存人对象,同姓名同年龄,视为同一个人,为重复元素
思路:
1.对人描述,将数据封装进人对象中
2.定义容器,将人存入
3.取出来
List 集合判断元素是否相同,依据的事equals()方法。(contains()he remove())
*/
class Person
{
private String name;
private int age;
Person(String name,int age )//一初始化姓名和年龄就全来了
{
this.name = name;
this.age = age;
}
public boolean equals(Object obj) //equals()方法在底层自动被调用。
//为什么定义在Person类中,而不是在主函数中。
{
if(!(obj instanceof Person))
return false;
Person p = (Person)obj;
return this.name.equals(p.name) && this.age == p.age;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public void setAge(int age)
{
this.age = age;
}
public int getAge()
{
return age;
}
}
class ArrayListTest2
{
public static void main(String[] args)
{
ArrayList al = new ArrayList();//判断对象是否相同equals()方法比较地址值
al.add(new Person(“lisi”,30)); // al.add(Object obj) = new Person();
al.add(new Person(“lisi1”,31));
al.add(new Person(“lisi1”,31));
al.add(new Person(“lisi2”,32));
al.add(new Person(“lisi3”,33));
// sop(al);//这里打印出来的是地址值。
al = singleElement(al);
//Iterator就已经将数组中的元素取出并且打印。
Iterator it = al.iterator();
while(it.hasNext())
{
Object obj = it.next();//it.next()返回值是Object类型。需要进行强制转换 1.
Person p = (Person)obj;
sop(p.getName()+ "::" + p.getAge());
//sop(it.hanNext().getName()+ "::" + it.hasNext().getAge());//不能用
}
}
public static ArrayList singleElement(ArrayList al)
{
ArrayList nAl = new ArrayList();
Iterator it = al.iterator();
while(it.hasNext())
{
Object obj = it.next();
if(!nAl.contains(obj))//调用contains 然后contains在底层调用equals
nAl.add(obj);
}
return nAl;
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}