维1 2017-09-08 13:58 采纳率: 66.7%
浏览 823
已采纳

entrySet在key是自定义对象时出现错误

package GenericDemo;

import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class TreeMapDemo {

public static void main(String[] args) {
    TreeMap<Person, String> map = new TreeMap<Person, String>();
    map.put(new Person("chenwei", 14), "anhui");
    map.put(new Person("chenwei1", 13), "anhui");
    map.put(new Person("chenwei2", 15), "hehe");
    map.put(new Person("chenwei3", 14), "anhui");
    map.put(new Person("chenwei3", 14), "jiangsu");

    Set<Map.Entry<Person, String>> entrySet = map.entrySet();
    Iterator<Map.Entry<Person, String>> it = entrySet.iterator();
    while (it.hasNext()) {
        Map.Entry<Person, String> m = it.next();
        String value = map.get(m);
        Person p = m.getKey();
        System.out.println("name" + p.getName() + ":" + p.getAge() + "籍贯" + value);
    }
}

}
//以下是自定义对象的代码,在自定义对象中我写了compareTo方法。是不是我写的有问题??
package GenericDemo;

public class Person implements Comparable {
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;
}

public Person() {
    super();
}

public Person(String name, int age) {
    super();
    this.name = name;
    this.age = age;
}

@Override
public int compareTo(Person p) {
    // 以年龄为主要元素比较
    int temp = this.age - p.age;
    return temp == 0 ? this.name.compareTo(p.name) : temp;
}


@Override
public int hashCode() {
    //System.out.println("hashCode:" + name.hashCode() + age);
    return name.hashCode() + age;
    // return 0;
}

@Override
public boolean equals(Object obj) {
    Person p = (Person) obj;
    return this.name.equals(p.getName());
}

}

  • 写回答

2条回答

  • ziwozizhan 2017-09-09 14:37
    关注
    while (it.hasNext()) {
        Map.Entry<Person, String> m = it.next();
        String value = map.get(m);
        Person p = m.getKey();
        System.out.println("name" + p.getName() + ":" + p.getAge() + "籍贯" + value);
    }
        改写成
        while (it.hasNext()) {
            Map.Entry<Person, String> m = it.next();
            Person p = m.getKey();
            String value = map.get(p);
            System.out.println("name" + p.getName() + ":" + p.getAge() + "籍贯"
                    + value);
        }
    
        继承可比较接口的类写成 implements Comparable<Person>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP