import java.util.Set;
import java.util.HashMap;
import java.util.Collection;public class TestHashMap{
public static void main(String[] args) {
HashMap hm = new HashMap();
hm.put(new Integer(1003),new Person(1003,"张三",15));
hm.put(new Integer(1008),new Person(1008,"李四",25));
hm.put(1015,new Person(1015,"王五",73));   //自动封装
hm.put(1001,new Person(1001,"赵六",49)); System.out.println("----检索单个元素----");
Person p = (Person)hm.get(1008);
System.out.println(p);

System.out.println("----遍历所有\"键\"(元素名)----");
Set names = hm.keySet();
for(Object o : names){
System.out.println(o);
}

System.out.println("----遍历所有\"值\"(元素值)----");

Collection values = hm.values();
for(Object o : values){
System.out.println(o);
}
}
}
//class Person implements java.lang.Comparable{
class Person{

private final int id;
private String name;
private int age;

public Person(int id,String name,int age){
this.id = id;
this.name = name;
this.age = age;
}
public int getId(){
return id;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;

public int getAge(){
return age;
}
public String toString(){
return "Id: " + id + "\tName: " + name + "\tAge: " + age; 
}
/* @Override
public int compareTo(Object o){
Person p = (Person)o;
return this.id - p.id;
}
@Override
public boolean equals(Object o){
boolean flag = false;
if(o instanceof Person){
if(this.id == ((Person)o).id)
flag = true;
}
return false;
}*/
}
在这个程序中,注释掉部分有没有输出结果是一样的,请问一下,注释掉部分有什么用??谢谢

解决方案 »

  1.   

    注释掉的部分,是Person类实现继承的Comparable接口的compareTo()与equals()函数。这俩个函数是用来对Person类的对象进行比较的函数。其中compareTo()返回的是id的差值。equals() 首先判断形参O是否是Person类型的,o instanceof Person就是这个语句。然后是ID的比较。至于输出结果是一样的。是因为在输出的过程中,根本没有调用compareTo()与equals()者俩个函数~~~
      

  2.   

    一个实现了Comparable接口的类在一个Collection(集合)里是可以排序的,而排序的规则是按照你实现的Comparable里的抽象方法compareTo(Object o) 方法来决定的。 你这里没排序,所以没用到
      

  3.   

    重写compareTo和equal方法是为了比较集合中的元素