分享

去除集合中自定义对象的重复值(对象的成员变量值都相同)

 樱花梦_张艺馨 2016-12-12

package cn.itcast_04;

import java.util.ArrayList;
import java.util.Iterator;

/*
 * 需求:去除集合中自定义对象的重复值(对象的成员变量值都相同)
 *
 * 我们按照和字符串一样的操作,发现出问题了。
 * 为什么呢?
 *   我们必须思考哪里会出问题?
 *   通过简单的分析,我们知道问题出现在了判断上。
 *   而这个判断功能是集合自己提供的,所以我们如果想很清楚的知道它是如何判断的,就应该去看源码。
 * contains()方法的底层依赖的是equals()方法。
 * 而我们的学生类中没有equals()方法,这个时候,默认使用的是它父亲Object的equals()方法
 * Object()的equals()默认比较的是地址值,所以,它们进去了。因为new的东西,地址值都不同。
 * 按照我们自己的需求,比较成员变量的值,重写equals()即可。
 * 自动生成即可。
 */
public class ArrayListDemo3 {
 public static void main(String[] args) {
  // 创建集合对象
  ArrayList array = new ArrayList();

  // 创建学生对象
  Student s1 = new Student("林青霞", 27);
  Student s2 = new Student("林志玲", 40);
  Student s3 = new Student("凤姐", 35);
  Student s4 = new Student("芙蓉姐姐", 18);
  Student s5 = new Student("翠花", 16);
  Student s6 = new Student("林青霞", 27);
  Student s7 = new Student("林青霞", 18);

  // 添加元素
  array.add(s1);
  array.add(s2);
  array.add(s3);
  array.add(s4);
  array.add(s5);
  array.add(s6);
  array.add(s7);

  // 创建新集合
  ArrayList newArray = new ArrayList();

  // 遍历旧集合,获取得到每一个元素
  Iterator it = array.iterator();
  while (it.hasNext()) {
   Student s = (Student) it.next();

   // 拿这个元素到新集合去找,看有没有
   if (!newArray.contains(s)) {
    newArray.add(s);
   }
  }

  // 遍历新集合
  for (int x = 0; x < newArray.size(); x++) {
   Student s = (Student) newArray.get(x);
   System.out.println(s.getName() + "---" + s.getAge());
  }
 }
}

------------------------------------------------------------Student 类-------------

package cn.itcast_04;

public class Student {
 private String name;
 private int age;

 public Student() {
  super();
 }

 public Student(String name, int age) {
  super();
  this.name = name;
  this.age = age;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public int getAge() {
  return age;
 }

 public void setAge(int age) {
  this.age = age;
 }

 @Override
 public boolean equals(Object obj) {
  if (this == obj)
   return true;
  if (obj == null)
   return false;
  if (getClass() != obj.getClass())
   return false;
  Student other = (Student) obj;
  if (age != other.age)
   return false;
  if (name == null) {
   if (other.name != null)
    return false;
  } else if (!name.equals(other.name))
   return false;
  return true;
 }

}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多