HashSet

package com.test;

import java.util.HashSet;

public class Demo7 {

	public static void main(String[] args) {
		/*
		 * Set:无序的,不可重复的
		 * 		HashSet:底层是哈希表,线程是不安全的
		 * 		TreeSet:底层是二叉树,线程不安全的
		 * 
		 * hashSet实现不重复的原理:
		 * 是通过元素内部的hashCode和equals方法实现的去重,首先调用的是hashCode的方法,比较两个元素的哈希值,如果哈希值不同,就认为是两个对象,不在去调用equals,
		 * 如果哈希值相同再去调用equals方法进行比较,返回true认为是一个对象,返回false认为是两个对象.
		 * 
		 * 使用HashSet实现对Person1类的对象的保存并去保存
		 * 分析:重写Person1的hashCode和equals的方法
		 * 
		 * 注意:
		 * 1.hashSet本身不能实现排序.
		 * 2.对于自定义的类,要想实现去重,必须手动重写hashCode和equals方法
		 */
		HashSet set = new HashSet<>();
		//在add()内部实现的去重功能,默认调用hashCode和equals方法,进行去重
		//在string中重写了hashCode和equals方法
		set.add("java1");
		set.add("java2");
		set.add("java3");
		set.add("ja4");
		set.add("ja5");
		set.add("java3");//去除重复的后输出
	
		System.out.println(set);//随便放的,去除重复的后输出[java3, java2, java1, ja4, ja5]
	
		HashSet set1=new HashSet<>();
		//在add()内部实现的去重功能,默认调用hashCode和equals方法,进行去重
		set1.add(new Person("bingbing1", 20));
		set1.add(new Person("bingbing2", 200));
		set1.add(new Person("bingbing1", 20));
		set1.add(new Person("bingbing4", 203));
		System.out.println(set1);	
	}
}
class Person1{
	String name ;
	int age ;
	public Person1 (String name ,int age){
		super();
		this.name=name;
		this.age=age;
	}
	
	@Override
	public String toString() {
		return "Person1 [name=" + name + ", age=" + age + "]";
	}
	//重写hashCode方法
	//按照人的年龄和姓名比较,只要年龄和姓名一致就认为是一个人
	
	public int hashCode (){
		return name.hashCode()+age*10000;
	}
	//重写equals方法
	//按照人的年龄和姓名比较,只要年龄和姓名一致就认为是一个人
	public boolean equals(Object obj){
		if (!(obj instanceof Person1)) {
			throw new ClassCastException();
		}
		//向下转型
		Person1 person= (Person1)obj;
		return this.age==person.age && this.name.equals(person.name);
	}
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值