码迷,mamicode.com
首页 > 编程语言 > 详细

java 集合框架-ArrayList存储不重复的自定义对象

时间:2016-05-12 17:11:06      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:

/*
在ArrayList中存储自定义对象

为了实现在ArrayList中存储不重复的对象,需要重写equals方法。remove()方法和contains()方法都会调用equals()方法。
在使用HashSet时,也要在对象类中重写两个方法即,hashCode()和equals()方法。因为HashSet会在底层调用这两个函数。
首先比较HashCode(对象引用或地址),如果相同,再用equals比较对象是否相同。
*/
import java.util.*;
class Person
{
	private String name;
	private int age;
	Person(String name,int age)
	{
		this.name=name;
		this.age=age;
	}
	public String getName()
	{
		return name;
	}
	public int getAge()
	{
		return age;
	}

	public boolean equals(Object obj)  //为了比较对象内容,重写equals方法
	{
		if(!(obj instanceof Person))
			return false;
		Person p=(Person)obj;
		return this.name.equals(p.name) && this.age==p.age;
	}

}


class ArrayListTest2 
{
	public static void main(String[] args) 
	{
		ArrayList al=new ArrayList();
		al.add(new Person("Jhon_1",20));
		al.add(new Person("Jhon_2",20));
		al.add(new Person("Jhon_3",20));
		al.add(new Person("Jhon_3",20));
		al.add(new Person("Jhon_5",20));
		al.add(new Person("Jhon_3",20));
		//sop(al);
		sop(al.remove(new Person("Jhon_5",20)));  //底层也是使用equals方法。
		al=quchong(al);
		Iterator it=al.iterator();

		while(it.hasNext())
		{
			Object obj=it.next();
			Person p=(Person)obj;
			sop(p.getName()+"..."+p.getAge());
		}

		System.out.println("Hello World!");
	}

	public static ArrayList quchong(ArrayList al)
	{
		ArrayList al_des=new ArrayList();
		Iterator it=al.iterator();
		while(it.hasNext())
		{
			Object obj=it.next();
			if(!al_des.contains(obj))  //contains在底层调用了equals。但是这个原始的equals方法是对对象地址进行比较,而不是对对象内容进行比较,所以需要重写。
				al_des.add(obj);
		}
		return al_des;
	}

	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
}

java 集合框架-ArrayList存储不重复的自定义对象

标签:

原文地址:http://blog.csdn.net/iemdm1110/article/details/51361602

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!