天天看点

[javase]hashSet的hashCode和equals重写以及,set转成list后排序

package day14H;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

/**
 * 任务描述
定义一个老鼠类,该类有属性名字,爱好,年龄。创建老鼠对象,并初始化,然后把这些老鼠对象添加到一个集合中。
任务要求
1.	使用集合添加2只老鼠,:淘淘和杰瑞
2.	按照年龄升序排序;(比较器Comparable)
3.	再添加一只杰瑞老鼠,不允许此老鼠添加入集合,因为在老鼠王国不允许同名的老鼠
,老鼠名相同了会被认为是同一只老鼠。(重写hashCode和equals)
4.	使用Iterator显示所有老鼠信息;
5.	删除老鼠杰瑞
6.	输出集合中有多少只老鼠

知识点:Set接口。

 * */
public class H2 {
	public static void main(String[] args) {
		Mouse m1=new Mouse("淘淘", "捡垃圾", 20);
		Mouse m2=new Mouse("杰瑞", "跳舞", 12);
		Mouse m3=new Mouse("杰瑞", "跳舞1", 14);
		Mouse m4=new Mouse("杰瑞2", "跳舞1", 19);
		Set<Mouse> set=new HashSet<>();
		set.add(m1);
		set.add(m2);
		set.add(m3);
		set.add(m4);
		System.out.println(m2.hashCode());
		System.out.println(m3.hashCode());
		//用Collections提供的sort方法进行排序 只能对list生效
		List<Mouse> list=new ArrayList<>(set);
		Collections.sort(list,(s1,s2)->{return s1.getAge()-s2.getAge();});
		set=new HashSet<>(list);//再把list转成hashset
		set.forEach(System.out::println);
	}
}
class Mouse{
	private String name;
	private String hobby;
	private int age;
	public Mouse(String name, String hobby, int age) {
		this.name = name;
		this.hobby = hobby;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getHobby() {
		return hobby;
	}
	public void setHobby(String hobby) {
		this.hobby = hobby;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return name+"老鼠的年龄:"+age+" 爱好是"+hobby;
	}
	@Override
	public int hashCode() {
		return name.hashCode();//返回有识别度的哈希地址
	}
	@Override
	public boolean equals(Object o) {
		Mouse m=(Mouse)o;
		if(name.equals(m.getName())) {
			return true;
		}
		else {
			return false;
		}
	}
}