本帖最后由 wenbaoxing 于 2013-10-25 18:14 编辑
我给你做了详细的注释,你好好看看吧。我觉得你没有对迭代器的那几个方法理解,还有一定要细心,要不然“死都不知道怎么死的",方老师说过这样的话。- import java.util.*;
- //定义一个Person类,类名一般首字母大写
- class Person {
- private String name;
- private int age;
- //定义构造函数,相当于规定人对象一初始化就要有姓名和年龄
- Person(String name, int age) {
- this.name = name;
- this.age = age;
- }
- //因为后面我们需要将人对象存入集合当中,而集合容器底层需要调用equals方法,所以我们要在这定义一个equals方法
- public boolean equals(Object obj) {
- //首先判断要比较的对象是不是一个人类的实例,如果不是就不比较,因为拿一个不是人的东西和人比较没有意义
- if (!(obj instanceof Person))
- return false;
- //将我们接收的对象强转成Person
- Person p = (Person) obj;
- //这句代码体现的是:同姓名同年龄视为同一个人
- return this.name.equals(p.name) && this.age == p.age;
- }
- public String getname() {
- return name;
- }
- public int getage() {
- return age;
- }
- //我在这里定义了toStirng方法,这样我们在打印对象的时候,底层会自动调用该方法,
- //我们让该方法返回一些人的信息,方便我们观看
- public String toString() {
- return this.name + ":" + this.age;
- }
- }
- class Test {
-
- public static void sop(Object obj) {
- System.out.println(obj);
- }
- public static void main(String[] args) {
-
- //新建一个集合容器,你先存入四个元素,这样方便观看效果
- ArrayList al = new ArrayList();
- al.add(new Person("zhangsan1", 30));
- al.add(new Person("zhangsan2", 32));
- al.add(new Person("zhangsan1", 33));
- al.add(new Person("zhangsan1", 30));
- // al.add(new person("zhangsan1",37));
- // al.add(new person("zhangsan1",36));
-
- //打印原集合
- sop("原集合是:" + al);
- al = quchongfu(al);
-
- //打印我们修改之后的集合
- sop("去重复后是:" + al);
- //以下的这几个代码是让你练习使用迭代器遍历集合的
- Iterator it = al.iterator();
- while (it.hasNext()) {
- Person p = (Person) it.next();
- sop(p.getname() + "::" + p.getage());
- }
- }
- public static ArrayList quchongfu(ArrayList al) {
-
- //新建一个集合容器
- ArrayList newal = new ArrayList();
-
- //遍历原集合,每取到一个元素都要在我们刚刚建立的这个容器中查找一下,
- //只有新容器中不存在时我们才将这个元素add到集合中。通过这些代码可以发现contains底层调用的是equals方法
- Iterator it = al.iterator();
- //it.hasNext()的意思是:如果集合中还有元素,返回ture,否则返回false。
- //你如果改成(!it.hasNext()),那么第一次运行时这句代码的运算结果就是false,
- // 直接就执行下面return newal;这句代码了,这样会返回一个空数组
- while (it.hasNext()) { //你的源代码中多了!,
- Object obj = it.next();
- if (!newal.contains(obj)) {
- newal.add(obj);
- }
- }
- return newal;
- }
- }
复制代码 |