/*
要求:练习map集合的两种取出元素方式
思路;有两种:1,keySet:<1>运用Map集合的方法Set<K> keySet=t.keySet()将t集合中的Key取出并存在Set型集合中;
<2>通过迭代器取出Key
<3>通过Map中的Get(Object KeY)方法获取value值
2,entrySet<1>通过Set<Map.Entry<K,V>> entrySet=k.entrySet()获取映射关系的Set视图,而这个关系的类型就是Map.Entry
是map集合中的抽象内部类。叫键值对
<2>通过迭代器取出Set集合中的键值对既Map.Entry类的对象。
<3>通过Map.Entry类中的方法getKeY()h和getValue()来获取键和值
*/
import java.util.*;
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 int getAge()
{
return age;
}
public int hashCode()//元素不确定要存在什么地方,如果要存入到hashSet里面要定义比较方法,所以要复写Comparable的方法比较爱年龄和姓名
{
return name.hashCode()+age*12;
}
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;
}
public int compareTo(Student s)//定义一个比较方法,以备有二叉树集合调用
{
int num=this.name.compareTo(s.name);
if(num==0)
return new Integer(this.age).compareTo(new Integer(s.age));
return num;
}
}
class Stucomparator implements Comparator<Student>
{
public int compare(Student s1,Student s2)
{
int numb= s1.getName().compareTo (s2.getName());
if(numb==0)
return new Integer(s1.getAge()).compareTo (new Integer(s2.getAge()));
return numb;
}
}
class Maptest
{
public static void main(String[] args)
{
HashMap<Student,String> ma=new HashMap<Student,String>();
ma.put(new Student("lisi1",23),"henan");
ma.put(new Student("lisi3",26),"nanjing");
ma.put(new Student("lisi5",29),"beijing");
Set<Student> keySet=ma.keySet();
Iterator<Student> it=keySet.iterator();
while(it.hasNext())
{
System.out.println(it.next()+"...."+ma.get(it.next()));
}
}
} |