/*
每一个学生都有对应的归属地。
学生Studetn 地址String
学生属性:姓名,年龄。
注意:姓名和年龄相同的视为同一个学生。
保证学生的唯一性。
思路:
1.描述学生。
2.定义map容器。将学生作为键,地址作为值。存入。
3.获取map集合中的元素。
*/
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;
}
//-------当不确定要存入到哪种集合中,一般都要把这三个方法都写进去。compareTo是二叉树数据结构,hashCode和equals是哈希表数据结构。
public int compareTo(Student stu)
{
int num = new Integer(this.age).compareTo(new Integer(stu.age));
if(num==0)
{
return this.name.compareTo(stu.name);
}
return num;
}
public int hashCode()
{
return name.hashCode()+age;
}
public boolean equals(Object obj)
{
if(!(obj instanceof Student))
throw new ClassCastException("不是学生类");
Student s = (Student)obj;
return this.getName().equals(s.getName()) && this.age==s.getAge();
}
//----------------------------
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
class MapTest
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
Map<Student,String> map = new HashMap<Student,String>();
map.put(new Student("lisi01",21),"beijing");
map.put(new Student("lisi04",24),"nanjing");
map.put(new Student("lisi03",23),"wuhan");
map.put(new Student("lisi02",22),"hunan");
//第一种取出方式keySet
Set<Student> key = map.keySet();
Iterator<Student> it = key.iterator();
while(it.hasNext())
{
Student s = it.next();
String value = map.get(s);
sop("键:"+s.getName()+","+s.getAge()+"...值:"+value);
}
//第二种取出方式entrySet
Set<Map.Entry<Student,String>> keyRelation = map.entrySet();
Iterator<Map.Entry<Student,String>> itentrySet = keyRelation.iterator();
while(itentrySet.hasNext())
{
Map.Entry<Student,String> keyValue = itentrySet.next();
Student s = keyValue.getKey();
String v = keyValue.getValue();
sop("键:"+s.getName()+":"+s.getAge()+" 值:"+v);
}
}
}