黑马程序员__ ArrayList 与HashSet 去除重复函数的 区别 equals

------- android培训java培训、期待与您交流!    ---------

 

ArrayList中

package day14;

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

/*
将自定义对象作为元素存到ArrayList集合中,并去除从父元素。
比如:存人对象。同姓名同年龄,视为同一个人,为重复元素。

思路:
1,对人的描述,将数据封装进人对象。
2,定义容器,将人存入。
3,取出


结论 List 集合判断元素是否相同 ,依据的是元素equals方法
*/


//人的描述  类
class Person{
	private String name;
	private int age ;
	
	
	//构造器
	Person(String name, int age){
		this.name = name;
		this.age = age;
		}
	public boolean equals(Object obj){
		
		
		if(!(obj instanceof Person))
			return false;
			
			Person p = (Person)obj;
			System.out.println(this.name+";;;;;;"+p.name);
			
			return this.name.equals(p.name)&&this.age==p.age;
		}
	//获取
	public String getName(){
		return name;
		
	}
	
	public int getAge(){
		return age;
		
	}
	
}


public class ArrayListTest2 {

	public static void sop(Object obj){
		System.out.println(obj);
	}
	public static void main(String[] args) {
//定义一个 集合容器
		ArrayList al = new ArrayList();
		
		//外部 描述类  给容器添加   元素的格式〉〉〉〉〉〉〉〉找 构造器
		al.add(new Person("lisi01", 30));
		al.add(new Person("lisi02", 32));
		al.add(new Person("lisi02", 32));
		al.add(new Person("lisi03", 33));
		al.add(new Person("lisi04", 32));
		al.add(new Person("lisi04", 32));
		al.add(new Person("lisi05", 35));
		
		al = singleElment( al);
		//遍历取出
		Iterator it = al.iterator();
		while(it.hasNext()){
			//因为a1.add(Object obj);
			//Object obj = new Person("lisi01",30);   返回值提升了 为Object 
			Person	p=(Person)it.next();//〉〉〉〉〉〉所以要强转
			sop(p.getName()+",,,,,"+p.getAge());
		}
		
		
	}
	//唯一元素的 方法
	public static ArrayList singleElment(ArrayList a1){
		//定义一个临时容器
		ArrayList newA1 = new ArrayList();
		//遍历老集合
		Iterator it =a1.iterator();
		
		while (it.hasNext()){
			Object obj = it.next();//为什么要obj一下呢????  拿下一个元素用obj记下来
			//判断一下   如果不包含下面的一个元素  就往容器集合里面添加元素
			if(!newA1.contains(obj))//——————————————————————List---中用contains内部调用equals
				newA1.add(obj);
			
		}
		return newA1;
	}
	

}


 

HashSet

 

package day14;

import java.util.HashSet;
import java.util.Iterator;

/*王hashset集合中存入自定义对象
姓名和年龄视为同一个人,重复元素*/



/*HashSet 和Arraylisht 中 equals的区别 〉〉〉〉〉〉〉〉〉〉〉〉〉???????
  		首先Set存储时无序不可重复的,List是有序可重复的
		List---中用contains内部调用equals
 		Set----中使用的equals方法是其存入的类(Person或其他)的重写的equals,hashCode方法*/
public class HashSetTest {

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

	public static void main(String[] args) {
		HashSet hs = new HashSet();
		
		hs.add(new Person("a1",11));
		hs.add(new Person("a2",12));
		hs.add(new Person("a3",13));
		hs.add(new Person("a4",14));
		hs.add(new Person("a1",11));
		hs.add(new Person("a2",13));
		
		Iterator it =hs.iterator();
		
		while(it.hasNext()){
			Person	p=(Person)it.next();//〉〉〉〉〉〉所以要强转>>>>看ArrayListTest2
			sop(p.getName()+",,,,,"+p.getAge());
		}
	}

}
class Person{
	private String name;
	private int age ;
	
	
	//构造器
	Person(String name, int age){
		this.name = name;
		this.age = age;
		}
	
	public int hashCode(){
		//验证
		System.out.println(this.name+".....hashCode");
		
		//return 60;
		//为提高效率 返回name.hashCode()+age;
		//return name.hashCode()+age;  20+30=30+20  总hash值有可能相同   为了尽量保持返回的哈希值 唯一性    随便乘以一个数
		return name.hashCode()+age*39;
	}
	//hashset  判断
	public boolean equals(Object obj){
		
		
		if(!(obj instanceof Person))
			return false;
			
			Person p = (Person)obj;
			System.out.println(this.name+";;;equals;;;"+p.name);
			
			return this.name.equals(p.name)&&this.age==p.age;
		}
	//获取
	public String getName(){
		return name;
		
	}
	
	public int getAge(){
		return age;
		
	}
	
}


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值