问题描述:
每一个学生都有对应的归属地。学生Student,地址String。
学生属性:姓名,年龄。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、需求:对学生对象的年龄进行升序排序。
学生年龄具备自然顺序,具有可比性
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; } }