HashMap存储自定义对象练习(两种取出方式)

#日常练习

使用HashMap存储自定义对象,熟悉KeySet,EntrySet两种取出方式,定义自定义类是在不知道存储在哪种结构中时

建议复写hashCode,equals等方法,实现Comparable接口。


package Map;

import java.util.*;
import java.util.Map.Entry;
/*
 * 要求:用HashMap存储自定义对象,并采用两种方法取出
 * 思路:创建自定义对象(考虑到可能存储到其他类型的集合中,
 * 		在创建时需要复写hashCode,equals方法,实现Comparator接口)
 * 		使用KeySet,EntrySet取出元素;
 * */
//实现的应该是Comparable,而不是Comparetor,
//后者是比较器通常用于在调用的类内没有比较方法或方法不符合要求时自定义比较器
//并将其作为参数传入集合来完成特定比较

public class HashMapTest {

	public static void main(String[] args) {
		HashMap<Student,String> hm = new HashMap<Student,String>();
		hm.put(new Student("student1",21), "beijing");
		hm.put(new Student("student2",22), "shanghai");
		hm.put(new Student("student3",23), "anhui");
		hm.put(new Student("student4",24), "anhui");
		
		//取出
		//KeySet取出
		Set<Student> keySet = hm.keySet();
		
		for(Iterator<Student> it = keySet.iterator();it.hasNext();) {
			Student s = it.next();
			System.out.println(s.getName()+"  "+s.getAge()+"  "+hm.get(s));
		}
		//EntrySet
		Set<Entry<Student,String>> entrySet = hm.entrySet();
		for(Iterator<Entry<Student,String>> iter = entrySet.iterator();iter.hasNext();)
		{
			Entry<Student,String> en = iter.next();
			Student s = en.getKey();
			String address = en.getValue();
			System.out.println(s.getName()+"----"+s.getAge()+"-----"+address);
		}
		

	}

}

被调用的类
class Student implements Comparable<Student>{
	private String name;
	private int age;
	Student(String name,int age){
		this.name = name;
		this.age = 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 int compareTo(Student s) {
		int num = new Integer(this.age).compareTo(new Integer(s.age));
		if(num == 0) {
			return this.name.compareTo(s.name);
		}
		return num;
	}
	public int hashCode(Object obj) {
		return name.hashCode()+age*32;
	}
	public boolean equals(Object obj) {
		if(!(obj instanceof Student))
			throw new ClassCastException("传入的类类型异常");
		Student s = (Student)obj;
		if(this.age == s.age && this.name.equals(s.name))
			return true;
		return false;
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值