黑马程序员技术交流社区
标题:
ArrayListAdvancedTest
[打印本页]
作者:
itheima_llt
时间:
2015-4-14 13:31
标题:
ArrayListAdvancedTest
将自定义对象作为元素存到ArrayList集合中,并去除重复元素。
比如:存人对象。同姓名同年龄,视为同一个人。为重复元素。
思路:
1 把数据存入人中--把人抽象成类
2 把人存入集合中
3 去重
import java.util.*;
//把数据存入Person类中
class Person
{
private String name;//姓名
private int age;//年龄
Person(String name,int age)
{
this.name = name;
this.age = 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;
}
//覆盖Object中的equals方法,同名同岁为同一人
public boolean equals(Object obj)
{
//强制转换为Person对象
Person p = (Person)obj;
//调用了String中的equals方法
return this.name.equals(p.name) && this.age == p.age;
}
}
//主类
class ArrayListAdvancedTest
{
public static void main(String[] args)
{
//1 创建一个集合
ArrayList al = new ArrayList();
//2 初始化Person并存入集合
al.add(new Person("张三",20));
al.add(new Person("张三",20));
al.add(new Person("张三",20));
al.add(new Person("张四",21));
al.add(new Person("张四",21));
al.add(new Person("张四",21));
al.add(new Person("张五",22));
al.add(new Person("张五",22));
al.add(new Person("张六",23));
//3 打印原集合和原集合长度
System.out.println("原集合包含的元素如下:");
printPersonList(al);
System.out.println("原集合长度:"+al.size());
//打印分割线
System.out.println("---------------------------");
//4 把集合去重
al = singlePerson(al);
//5 打印去重后的集合及其长度
System.out.println("原集合去重后包含的元素如下:");
printPersonList(al);
System.out.println("去重后的集合长度:"+al.size());
}
//Person对象集合去重方法
public static ArrayList singlePerson(ArrayList al)
{
//1 创建一个临时集合
ArrayList tempList = new ArrayList();
//2 使用迭代器取出原集合元素
for(Iterator it = al.iterator(); it.hasNext(); )
{
//创建一个临时引用,指向原集合元素
Person p = (Person)it.next();
//3 判断--去重--存入临时集合
if(!tempList.contains(p))
tempList.add(p);
}
//4 返回去重后的集合
return tempList;
}
//打印Person集合元素的方法
public static void printPersonList(ArrayList al)
{
//使用迭代器取出Person集合中的元素
for(Iterator it = al.iterator(); it.hasNext(); )
{
//把Object对象强制转换为Person对象
Person p = (Person)it.next();
//打印Person的姓名和年龄
System.out.println(p.getName()+"--"+p.getAge());
}
}
}
复制代码
小结:
contains()底层原理-----equals()
remove()底层原理-----equals()
迭代器返回的对象是Object类型的,记得要强制转换。
迭代器取元素要注意避免NoSuchElemetException--------创建临时引用,指向迭代器取出的对象。
Person集去重练习演示.jpg
(67.36 KB, 下载次数: 1)
下载附件
2015-4-14 13:31 上传
作者:
itheima_llt
时间:
2015-4-15 11:07
版主给点分啊!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2