黑马程序员技术交流社区

标题: ArrayListAdvancedTest [打印本页]

作者: itheima_llt    时间: 2015-4-14 13:31
标题: ArrayListAdvancedTest
将自定义对象作为元素存到ArrayList集合中,并去除重复元素。

比如:存人对象。同姓名同年龄,视为同一个人。为重复元素。

思路:
1 把数据存入人中--把人抽象成类
2 把人存入集合中
3 去重

  1. import java.util.*;
  2. //把数据存入Person类中
  3. class Person
  4. {
  5.         private String name;//姓名
  6.         private int age;//年龄

  7.         Person(String name,int age)
  8.         {
  9.                 this.name = name;
  10.                 this.age = age;
  11.         }

  12.         public void setName(String name)
  13.         {
  14.                 this.name = name;
  15.         }

  16.         public String getName()
  17.         {
  18.                 return name;
  19.         }

  20.         public void setAge(int age)
  21.         {
  22.                 this.age =age;
  23.         }

  24.         public int getAge()
  25.         {
  26.                 return age;
  27.         }

  28.         //覆盖Object中的equals方法,同名同岁为同一人
  29.         public boolean equals(Object obj)
  30.         {
  31.                 //强制转换为Person对象
  32.                 Person p = (Person)obj;

  33.                 //调用了String中的equals方法
  34.                 return this.name.equals(p.name) && this.age == p.age;
  35.         }
  36. }

  37. //主类
  38. class ArrayListAdvancedTest
  39. {
  40.         public static void main(String[] args)
  41.         {
  42.                 //1 创建一个集合
  43.                 ArrayList al = new ArrayList();

  44.                 //2 初始化Person并存入集合
  45.                 al.add(new Person("张三",20));
  46.                 al.add(new Person("张三",20));
  47.                 al.add(new Person("张三",20));
  48.                 al.add(new Person("张四",21));
  49.                 al.add(new Person("张四",21));
  50.                 al.add(new Person("张四",21));
  51.                 al.add(new Person("张五",22));
  52.                 al.add(new Person("张五",22));
  53.                 al.add(new Person("张六",23));


  54.                 //3 打印原集合和原集合长度
  55.                 System.out.println("原集合包含的元素如下:");
  56.                 printPersonList(al);
  57.                 System.out.println("原集合长度:"+al.size());

  58.                 //打印分割线
  59.                 System.out.println("---------------------------");

  60.                 //4 把集合去重
  61.                 al = singlePerson(al);

  62.                 //5 打印去重后的集合及其长度
  63.                 System.out.println("原集合去重后包含的元素如下:");
  64.                 printPersonList(al);
  65.                 System.out.println("去重后的集合长度:"+al.size());
  66.                
  67.         }

  68.         //Person对象集合去重方法
  69.         public static ArrayList singlePerson(ArrayList al)
  70.         {
  71.                 //1 创建一个临时集合
  72.                 ArrayList tempList = new ArrayList();

  73.                 //2 使用迭代器取出原集合元素
  74.                 for(Iterator it = al.iterator(); it.hasNext(); )
  75.                 {
  76.                         //创建一个临时引用,指向原集合元素
  77.                         Person p = (Person)it.next();

  78.                         //3 判断--去重--存入临时集合
  79.                         if(!tempList.contains(p))
  80.                                 tempList.add(p);
  81.                 }

  82.                 //4 返回去重后的集合
  83.                 return tempList;
  84.         }

  85.         //打印Person集合元素的方法
  86.         public static void printPersonList(ArrayList al)
  87.         {
  88.                 //使用迭代器取出Person集合中的元素
  89.                 for(Iterator it = al.iterator(); it.hasNext(); )
  90.                 {
  91.                         //把Object对象强制转换为Person对象
  92.                         Person p = (Person)it.next();

  93.                         //打印Person的姓名和年龄
  94.                         System.out.println(p.getName()+"--"+p.getAge());
  95.                 }
  96.         }
  97. }
复制代码


小结:
contains()底层原理-----equals()
remove()底层原理-----equals()
迭代器返回的对象是Object类型的,记得要强制转换。
迭代器取元素要注意避免NoSuchElemetException--------创建临时引用,指向迭代器取出的对象。


Person集去重练习演示.jpg (67.36 KB, 下载次数: 1)

Person集去重练习演示.jpg

作者: itheima_llt    时间: 2015-4-15 11:07
版主给点分啊!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2