君子攸宁

导航

★★★ArrayList去除指定对象的重复元素

当往ArrayLIst中存储自定义对象时,一般要去除重复的元素,比如传进来学生,之前我们定义了AraayList去除重复元素的两个方法,其实根本上都是用的对象的equals方法,contains底层也是调用的equals方法,String 就不需要我们重写了,但是自定义对象不同,它比的是内存地址。我往ArrayList

存储两次 list.add(new Student(" zhangsan",27)),这两个学生的地址是不同的,这个时候需要我们重写学生类(自定义对象类)的equasl方法,建立他自己的判断重复的依据。实现代码如下、

package com.runoob.Collection;

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

class Person{
	private String name;
	private int 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;
	}


	public Person() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
	/**
	 * 建立Person类自己的判断对象是否相同的依据
	 */
	public boolean equals(Object obj){
		//为了提高效率,如果比较的对象是同一个,直接返回true
		if(this==obj)
			return true;
		//这里是判断是否为一个类型
		if(!(obj instanceof Person)){
			throw new ClassCastException("类型错误");
		}
		System.out.println(this+"==============="+obj);
		Person p =(Person)obj;
		return this.name.equals(p.name)&&this.age==p.age;
	}
}
/*
 * ArrayList取出重复元素的两种方法
 */
public class ListItertorDemo {
	public static void main(String[] args) {
		List list = new ArrayList();
		Person p1=new Person("haha",21);
		Person p2=new Person("gaga",22);
		Person p3=new Person("hihi",23);
		Person p4=new Person("hoho",24);

		list.add(p1);
		list.add(p2);
		list.add(p3);
		list.add(p4);
		list.add(p1);
		list.add(p2);
		list.add(p3);
		list.add(p4);

//		for (Iterator it = list.iterator(); it.hasNext();) {
//			Person per = (Person) it.next();
//			System.out.println(per);
//		}
		System.out.println(list);
		singleElement(list);
		System.out.println(list);
	}

	//去除重复的方法之一


	public static void singleElement(List list){
		List temp = new ArrayList();

		for (Iterator it = list.iterator(); it.hasNext();) {
			Object obj = (Object) it.next();
			if(!temp.contains(obj))//contains调用的就是equals方法
				temp.add(obj);
		}
		list.clear();
		list.addAll(temp);

	}
}

  

 

posted on 2017-07-22 15:14  君子攸宁  阅读(292)  评论(0编辑  收藏  举报