黑马程序员技术交流社区
标题:
TreeMap的代码错误<已解决>
[打印本页]
作者:
左建飞
时间:
2012-8-20 17:26
标题:
TreeMap的代码错误<已解决>
本帖最后由 左建飞 于 2012-8-20 17:51 编辑
package day16;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class StudentMap
{
/**
* @Map中装Student对象为key,相应地址为value。
*/
public static void main(String[] args)
{
//HashMap<Student,String> hm=new HashMap<Student,String>();
TreeMap<Student,String> tm=new TreeMap<Student,String>();
tm.put(new Student("zhangsan01",20), "beijing");
tm.put(new Student("zhangsan01",20), "beijing");
tm.put(new Student("zhangsan01",20), "tianjin");
tm.put(new Student("zhangsan02",22), "shanghai");
tm.put(new Student("zhangsan03",23), "tianjin");
Set<Map.Entry<Student,String>> hs=tm.entrySet();
for(Iterator<Map.Entry<Student,String>> it=hs.iterator();it.hasNext();)
{
Map.Entry<Student, String> me=it.next();
Student stu=me.getKey();
String add=me.getValue();
System.out.println(stu+"^"+add);
}
}
}
class Student implements Comparable<Student>
{
private String name;
private int 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;
}
Student(String name,int age)
{
this.name=name;
this.age=age;
}
public int compareTo(Student s)//排序根据。
{
int num=new Integer(this.age).compareTo (new Integer(this.name));
if(num==0)
return this.name.compareTo(s.name);
return num;
}
public int hashCode()//要重写hashCode方法。尽量让每个元素的返回值不同。
{
return this.name.hashCode()+age*10;
}
public boolean equals(Object obj)//重写equals方法。
{
if(!(obj instanceof Student))
throw new ClassCastException("类型不匹配");
Student s=(Student) obj;
return this.name.equals(s.name)&&(this.age==s.age);
}
public String toString()//打印对象需要调用这个方法。
{
return this.name+":"+this.age;
}
}
复制代码
为什么使用HashMap时完全正常,一改为TreeMap就报错呀?各位高手帮我找找错误吧。
作者:
王少岩
时间:
2012-8-20 17:43
第57行int num=new Integer(this.age).compareTo (new Integer(this.name));
应该是int num=new Integer(this.age).compareTo (new Integer(
s.age
));
作者:
唐杨老师
时间:
2012-8-20 17:46
本帖最后由 唐杨 于 2012-8-20 17:48 编辑
把57行该成这个就可以了..
int num = new Integer(this.age).compareTo (new Integer(s.age));
呵呵,你挺有意思.把年龄跟名字放一起比较.这个把数字转成字符串.利用Integer的方法倒是不错,值得借鉴
快给分.
作者:
左建飞
时间:
2012-8-20 17:50
我什么也没问,你们什么也没看见。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2