gpt4 book ai didi

java - 树集的行为不同,但哈希集在自定义对象的情况下则不然

转载 作者:行者123 更新时间:2023-12-02 05:27:12 25 4
gpt4 key购买 nike

在下面创建的代码中有具有属性 Id 和 Name 的 Employee 类,创建了 Employee 类 e1、e2、e3 的 3 个对象,其名称属性分别为 a、b、a。当我在哈希集中添加这些对象时,大小显示为 3,但在树集中,即使我没有覆盖哈希代码和 equals 方法,它也显示大小为 2。

    Emplyoee class.............................


package collection.core.concept;

public class Employee implements Comparable<Employee>{

private int id;
private String name;

public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

@Override
public int compareTo(Employee o) {
if(this.name.equal(o.getName()){
return 0;
}else{
return 1;
}
}
@Override
public String toString(){
return name;

}
}

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

Employee e1 = new Employee();
e1.setId(1);
e1.setName("alok");
Employee e2 = new Employee();
e2.setId(2);
e2.setName("vaibhav");
Employee e3 = new Employee();
e3.setId(3);
e3.setName("alok");


Set<Employee> Employee1 = new TreeSet<Employee>();

Employee1.add(e1);
Employee1.add(e2);
Employee1.add(e3);
System.out.println(Employee1.size());

}
}

最佳答案

一般情况下,你不能有重复。因此大小是二。

 @Override
public boolean equals(Object obj) {
Employee emp = (Employee) obj;
if (name.equals(emp. getName())) {
return true;
}
return false;
}

它只检查名称,即使 id 不同,它也会将它们视为相同的对象。

更改为

    @Override
public boolean equals(Object obj) {
if(obj instanceof this) {
Employee emp = (Employee) obj;
if (name.equals(emp. getName()) && id == emp.getId()) {
return true;
}
return false;
}
return false;
}

而且代码是错误的

@Override
public int compareTo(Employee o) {
if(this.name==o.name){
return 0;
}else{
return 1;
}
}

更改为

@Override
public int compareTo(Employee o) {
return name.compareTo(o.getName());
}

您不能使用 == 使用 .equals 方法来比较字符串。

关于java - 树集的行为不同,但哈希集在自定义对象的情况下则不然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25896848/

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