zoukankan      html  css  js  c++  java
  • java中的ArrayList 使得集合中的对象不重复

    JAVA中的List接口存放的元素是可以重复的,在这个我重写对象里面的equals()方法,让集合里存放的对象不能重复

    首先建一个类,在里面的main()方法中实现

    list1中存放的是可以重复对象的集合,在新建了一个newlist,里面存放不能重复对象的集合

    在迭代器中实现判断和存对象到newlist中。

    新建的一个Man类,用于封装属性和重写equals()方法,实现两个对象的属性一样时,即判定为同一个对象

    package com.tercher.demo;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    public class EqualsArray {
    	/*
    	 * List集合中允许存入重复的元素,所以,
    	 * 要使得集合中没有重复的元素,需要重写类的equals()方法
    	 */
    	public static void main(String[] args) {
    		
    		List list1 = new ArrayList();
    		list1.add(new Man("json", "nan"));
    		list1.add(new Man("json", "nan"));
    		list1.add(new Man("json", "nv"));
    		list1.add(new Man("nana", "nv"));
    		
    		ArrayList  newlist = new ArrayList();
    		
    		Iterator iter =  list1.iterator();
    		//通过迭代器判断是否相等,并不同的对象加入新的集合中
    		/*
    		 *ArrayList中的contain()方法,是查看集合是否包含此对象。有则返回true
    		 *在调用此方法时,就会调用Man对象里面重写的equals()
    		 */
    		while (iter.hasNext()) {
    			Object object  = iter.next();
    			Man man = (Man)object;
    			if (!newlist.contains(man)) {
    				newlist.add(man);
    			}
    		}
    		for (int i = 0; i < newlist.size(); i++) {
    			System.out.println("不重复的集合:"+newlist.get(i));
    		}
    		
    	}
    }
    
    
    class Man{
    	private String name;
    	private String sex;
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getSex() {
    		return sex;
    	}
    	public void setSex(String sex) {
    		this.sex = sex;
    	}
    	public Man(String name, String sex) {
    		super();
    		this.name = name;
    		this.sex = sex;
    	}
    	public Man() {
    		super();
    	}
    	@Override
    	//从写toString()方法,直接调用对象引用时输出
    	//否则就调用对象引用输出的是地址
    	public String toString() {
    		return "Man [name=" + name + ", sex=" + sex + "]";
    	}
    
    	@Override
    	//重写比较方法,当对象类型一样时,name和sex的值一样即为同一对象
    	public boolean equals(Object obj) {
    		//比较是否是 Man 类对象
    		if (!(obj instanceof Man)) {
    			return false;
    		}
    		 Man man =  (Man)obj;
    		 System.out.println("调用equals方法:"+this+"和"+man);
    		return (this.name.equals(man.name))&& (this.sex.equals(man.sex));
    	}
    	
    	
    	
    }
    

      

    Man类中重写了toString()方法,便于直接用对象的引用就可以输出对象的属性

    下面是Man类中重写的equals()方法,首先判断这个obj对象是不是Man类的实例,然后再判断两个对象的属性是否一样。

    在中间我输出了做比较的两个对象的属性。

    最上面的main()方法中,用的ArrayList类中的contain()方法的源码如下:

    可以发现是在contain()方法中调用了对象的equals()方法。

    所以最后得出newlist中存放的对象是不可以重复的。结果图如下:

  • 相关阅读:
    JavaScript学习总结(5)——Javascript面向(基于)对象编程
    JavaScript学习总结(4)——JavaScript数组
    高性能Web动画和渲染原理系列(4)“Compositor-Pipeline演讲PPT”学习摘要【华为云技术分享】
    AI:为你写诗,为你做不可能的事
    鲲鹏性能优化十板斧(二)——CPU与内存子系统性能调优
    鲲鹏性能优化十板斧——鲲鹏处理器NUMA简介与性能调优五步法
    华为鲲鹏云之我见
    一站式应用平台,华为云实现自动化构建知识图谱
    化鲲为鹏,我有话说 ,鲲鹏ARM架构的优势
    【读一本书】《昇腾AI处理器架构与编程》--神经网络基本知识学习(1)
  • 原文地址:https://www.cnblogs.com/nn369/p/7463032.html
Copyright © 2011-2022 走看看