Map元素的两种取出方式练习

问题描述

每一个学生都有对应的归属地。学生Student,地址String。

学生属性:姓名,年龄。
注意:姓名和年龄相同的视为同一个学生。
保证学生的唯一性。
思路:
1,描述学生。
2,定义map容器。将学生作为键,地址作为值。存入。

3,获取map集合中的元素。

代码示例:

package tan;
import java.util.*;
public class MapTest1 {
public static void main(String[] args) {
	HashMap<Student, String>hs=new HashMap<Student,String>();
			  hs.put(new Student("tantian", 23), "Beijing");
			  hs.put(new Student("xiaoqia", 24), "Henan");
			  hs.put(new Student("zhengqi", 22), "henu");
			  
		  //第二种取出方式
			  Set<Student>keyset=hs.keySet();
			  Iterator<Student>iter=keyset.iterator();
			  while(iter.hasNext()){
				  Student stu=iter.next();
				  String addr=hs.get(stu);
				  System.out.println(stu+":"+addr);
			  }
			  
			  
			  System.out.println();
			  
			  
			  //第二种取出方式
			  Set<Map.Entry<Student, String>>entrySet=hs.entrySet();
			  Iterator<Map.Entry<Student, String>> it=entrySet.iterator();
			  while(it.hasNext()){
				  Map.Entry<Student, String>me=it.next();
				  Student key=me.getKey();
				  String value=me.getValue();
				  System.out.println(key+" "+"地址:"+value);
			  }
	
	
}
}
class Student implements Comparable<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 void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
	
		return "姓名:"+name+" "+"年龄:"+age;
	}
	@Override
	public int hashCode() {
		
		return name.hashCode()+age*32;
	}
	@Override
	public boolean equals(Object obj) {
		if(!(obj instanceof Student)){
			throw new ClassCastException("类型不匹配");
		}
		Student stu=(Student)obj;
		return this.name.equals(stu.name) && this.age==stu.age;
	}
	@Override
	public int compareTo(Student s) {
		int num=new Integer(this.age).compareTo(new Integer(s.age));
		if(num==0){
			this.name.compareTo(s.name);
		}
		return num;
	}
}
2、需求:对学生对象的年龄进行升序排序。
     因为数据是以键值对形式存在的,所以要使用可以排序的Map集合。TreeMap。

学生年龄具备自然顺序,具有可比性

package tan;

import java.util.*;
public class MapTest2 {
	public static void main(String[] args) {
		TreeMap<Student, String>tm=new TreeMap<Student, String>();
				tm.put(new Student("dtan01", 21), "BeiJING");
				tm.put(new Student("ftan01", 23), "BeiJING");
				tm.put(new Student("ktan01", 21), "BeiJING");
				tm.put(new Student("atan01", 25), "BeiJING");
				
				Set<Map.Entry<Student, String>>entrySet=tm.entrySet();
				Iterator<Map.Entry<Student, String>>it=entrySet.iterator();
			
				while(it.hasNext()){
					Map.Entry<Student, String>me=it.next();
					Student stu=me.getKey();
					String addr=me.getValue();
					System.out.println(stu+":"+addr);
				}
	}
}

3、需求:对学生对象的姓名进行排序。

package tan;

import java.util.*;
public class MapTest2 {
	public static void main(String[] args) {  //传入姓名比较器
		TreeMap<Student, String>tm=new TreeMap<Student, String>(new StuNameComparator());
				tm.put(new Student("dtan01", 21), "BeiJING");
				tm.put(new Student("ftan01", 23), "ShangHai");
				tm.put(new Student("ktan01", 21), "xinyang");
				tm.put(new Student("atan01", 25), "KaiFeng");
				
				Set<Map.Entry<Student, String>>entrySet=tm.entrySet();
				Iterator<Map.Entry<Student, String>>it=entrySet.iterator();
			
				while(it.hasNext()){
					Map.Entry<Student, String>me=it.next();
					Student stu=me.getKey();
					String addr=me.getValue();
					System.out.println(stu+":"+addr);
				}
	}
}
class StuNameComparator implements Comparator<Student>{
	@Override
	public int compare(Student s1, Student s2) {
		int num=s1.getName().compareTo(s2.getName());
		if(num==0){
			return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
		}
		return num;
	}
}




你可能感兴趣的:(Map元素的两种取出方式练习)