gpt4 book ai didi

java - TreeMap - 为什么即使在其中添加超过 2 个元素后它也只返回 1 的大小?

转载 作者:行者123 更新时间:2023-12-02 09:46:55 26 4
gpt4 key购买 nike

public class BigD{
public static void main(String[] args) {


List<Employee> emps = new ArrayList<Employee>();
emps.add(new Employee("Bal", "5"));
emps.add(new Employee("Kiri", "7"));
emps.add(new Employee("Pad", "2"));

Map tree = new TreeMap();
for(int i=0; i<emps.size(); i++) {
Employee emp = null;
emp = emps.get(i);
System.out.println("hashcode : " + emp.hashCode());
tree.put(emp, emp.getFirstNM()); // why is not keeping all three elements here ?
}
System.out.println(tree.size()); //why does it print the size as "1"
}
}

class Employee implements Comparable {
private String firstNM;
private String lastNM;

Employee(String firstNM, String lastNM) {
this.firstNM = firstNM;
this.lastNM = lastNM;
}

public String getFirstNM() {
return firstNM;
}
public void setFirstNM(String firstNM) {
this.firstNM = firstNM;
}
public String getLastNM() {
return lastNM;
}
public void setLastNM(String lastNM) {
this.lastNM = lastNM;
}

public int compareTo(Object o) {
// TODO Auto-generated method stub
return 0;
}
}

请告诉我为什么树形图“树”只有一个元素,即员工对象“Pad”,即使我添加的所有三个员工对象都具有不同的哈希码。是因为我没有重写 equals/hashcode 吗?如果是 - 为什么当所有人都返回不同的哈希码时我应该覆盖您的想法将不胜感激。谢谢

最佳答案

因为您在 compareTo() 方法中比较每个对象相同

  public int compareTo(Object o) {
// TODO Auto-generated method stub
return 0;
}

让它像

public int compareTo(Object o) {
return ((this.getFirstName() + this.getLastName()).compareTo((o.getFirstName() + o.getLastName())));
}

这会说,如果两个人具有相同的名字和姓氏,那么他们是平等的,我建议您使用人员 ID 字段来区分

因此,当它尝试添加另一个实例时,它会发现它与 Map 的 Key Set 中已添加的实例相同

使compareTo实现正确并覆盖equals()方法

关于java - TreeMap - 为什么即使在其中添加超过 2 个元素后它也只返回 1 的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10993533/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com