天天看点

《黑马程序员》 map集合练习

public class MapTest {

	/**
	 * 每一个学生都有对应的归属地 学生Student,地址:String 
	 * 学生属性:姓名和年龄 
	 * 注意:姓名和年龄相同的视为同一个学生 保证学生的唯一性
	 * 
	 * 1,描述学生 2,定义map容器,将学生作为键,地址做为仁政,存入 3,获取map集合中的元素
	 */
	public static void main(String[] args) {
		Map<Student,String> map=new HashMap<Student,String>();
		map.put(new Student("scg",25), "吉安");
		map.put(new Student("scg",28), "梅县");
		map.put(new Student("ldm",21), "吉林长春");
		map.put(new Student("zdf",16), "合肥");
		map.put(new Student("lmp",24), "长化");
		map.put(new Student("zdf",24), "长化");
		map.put(new Student("zdf",16), "长化");
		map.put(new Student("scf",22), "太原");
		
		//第一种取出方式
		//得到所有的key的集合
		Set<Student> keys=map.keySet();
		Iterator<Student> ite=keys.iterator();
		while(ite.hasNext()){
			//返回迭代到的元素
			Student s=ite.next();
			//得到key所对应的value
			String values=map.get(s);
			System.out.println("第一种取出方式:"+"姓名:"+s.getName()+"..."+"..年龄:"+s.getAge()+"..地址:"+values);
		}
		
		//第二种取出方式
		//取出集合中的元素
		//得到所有key和vlaue映射的集合
		Set<Map.Entry<Student,String>> sets=map.entrySet();
		//获取迭代器
		Iterator<Map.Entry<Student,String>> itea=sets.iterator();
		while(itea.hasNext()){
			Map.Entry<Student, String> mapInfo=itea.next();
			Student s=mapInfo.getKey();
			String sv=mapInfo.getValue();
			System.out.println("第二种取出方式:学生:姓名:"+s.getName()+"...年龄:"+s.getAge()+"...地址:"+sv);
		}
	}
}

// hash中判断唯一性是根据的是对象的equals和hashcode方法
class Student { // 保证学生的唯一性
	private String name;
	private int age;

	public Student(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public int getAge() {
		return age;
	}

	// 先判断hashcode值再判断equals
	@Override
	public int hashCode() {
		//我们使用对象的姓名的hashcode+年龄+27/或39都是可以的
		//使用这个来保证对象的唯一性
		return this.name.hashCode()+this.age*37;
	}

	//根据内容来判断
	//当姓名和年龄都相等的时候它们是同一个人
	@Override
		public boolean equals(Object obj) {
			if(!(obj instanceof Student))
				return false;
			Student s=(Student)obj;
			return s.name.equals(s.name)&&this.age==s.age;
		}
}