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

/*
在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);
	}
}

时间: 2024-10-14 09:21:39

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

集合框架(ArrayList存储自定义对象并遍历泛型版)

//集合框架(ArrayList存储自定义对象并遍历泛型版) package cn.itcast_02; import java.util.ArrayList; import java.util.Iterator; /* * 需求:存储自定义对象并遍历. * * A:创建学生类 * B:创建集合对象 * C:创建元素对象 * D:把元素添加到集合 * E:遍历集合 */ public class ArrayListDemo2 { public static void main(String[]

java集合框架--ArrayList类、Vector和LinkedList类

1.ArrayList类概述 底层数据结构是数组,查询块,增删慢. 线程不安全,效率高. 2.ArrayList案例 2.1存储字符串并遍历 package com; import java.util.ArrayList; import java.util.Iterator; import java.util.ListIterator; public class ArrayListDemo { public static void main(String[] args) { //创建ArrayL

集合框架(ArrayList存储字符串并遍历泛型版)

package cn.itcast_02; import java.util.ArrayList; import java.util.Iterator; /* * 泛型在哪些地方使用呢? * 看API,如果类,接口,抽象类后面跟的有<E>就说要使用泛型.一般来说就是在集合中使用. */ public class ArrayListDemo { public static void main(String[] args) { // 用ArrayList存储字符串元素,并遍历.用泛型改进代码 Ar

Java集合框架(二)day_16

16.集合框架(去除ArrayList中重复字符串元素方式)(掌握) public class Demo1_ArrayList { /** * * A:案例演示 * 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同) * 思路:创建新集合方式 */ public static void main(String[] args) { ArrayList list = new ArrayList(); list.add("a"); list.add("a"

Java核心类库—集合框架—ArrayList类

ArrayList类是java集合框架出现之后取代Vector类的 二者底层原理都是基于数组的算法,一模一样. 区别: Vector:所有的方法都使用了synchronize修饰符 线程安全但是性能较低,适用于多线程环境. ArrayList:所有的方法都没使用synchronize修饰符 线程不安全但性能较高. 即使以后多线程也不要使用Vector类 因为:List list = Collections.synchronizedList(new ArrayList(...)); 常用方法参照V

jdk源码阅读笔记之java集合框架(二)(ArrayList)

关于ArrayList的分析,会从且仅从其添加(add)与删除(remove)方法入手. ArrayList类定义: p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Monaco } span.s1 { color: #931a68 } public class ArrayList<E> extends AbstractList<E> implements List<E> ArrayList基本属性: /** *

Java—集合框架List

集合的概念 现实生活中:很多的事物凑在一起 数学中的集合:具有共同属性的事物的总和 Java中的集合类:是一种工具类,就像是容器,存储任意数量的具有共同属性的对象 集合的作用 在类的内部,对数据进行组织(针对作用与意义一样的属性,将他们放到一个集合中) 简单而快速的搜索大数量的条目 有的集合接口,提供了一系列排列有序的元素,并且可以在序列中快速的插入或删除有关元素 有的集合接口,提供了映射关系,可以通过关键字(key)去快速查找到对应的唯一对象,而这个关键字可以是任意类型 与数组相比 数组的长度

JAVA集合框架

收藏 查看我的收藏 146有用+1 56 编辑 Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称.用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台.动态的Web.Internet计算.从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet.集合框架是为表示和操作集合而规定的一种统一的标准的体系结构.任何集合框架都包含三大块内容:对外的接口.接口的实

2016.3.9-3.10(java集合框架)

3.9 集合框架有什么作用? 集合框架其主要功能是用来将存储的数据以某种结构组织,并以特定的方式来访问这些数据. Java集合框架中有哪些存储方式? Java集合框架中的对象容器,按照对象在其中的存储方式,分为Set.List.和Map三种类型. Set类型对象没有顺序,且不能重复: List类型对象容器中的对象按照索引顺序排序,而且可以有重复的对象: Map类型对象容器中的元素包含一对“键对象-值对象”映射,其中键对象不能重复,值对象可以重复. 以上三种存储方式对应Java集合框架中Set.L