zoukankan      html  css  js  c++  java
  • ★★★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);
    
    	}
    }
    

      

  • 相关阅读:
    Google Kubernetes设计文档之服务篇-转
    基于kubernetes构建Docker集群管理详解-转
    Pass云Docker介绍
    Spring <context:annotation-config/> 解说
    webapp开发需要注意的浏览器内核知识
    koala编译scss文件时不支持中文字体的解决方案
    CSS3硬件加速需要注意的事项
    ios客户端快速滚动和回弹效果的实现
    mui禁止滚动条和禁止滚动
    苹果端禁用左右滑动屏幕返回上级页面
  • 原文地址:https://www.cnblogs.com/youning/p/7221425.html
Copyright © 2011-2022 走看看