Java 如何将对象作为键存储到hashmap中,并将其插入到结束顺序中,而不使用comparator和Compressable

Java 如何将对象作为键存储到hashmap中,并将其插入到结束顺序中,而不使用comparator和Compressable,java,hashmap,logic,hashcode,Java,Hashmap,Logic,Hashcode,我想将对象作为键存储在哈希映射中,在检索时间时,我希望根据员工id按升序排列。我不想使用comparator或Comapable接口,只需要根据hashcode和equals方法进行排序是可能的 public class Employee { private String name; private int id; public String getName() { return name; } @Override public int hashCode() { fina

我想将对象作为键存储在哈希映射中,在检索时间时,我希望根据员工id按升序排列。我不想使用comparator或Comapable接口,只需要根据hashcode和equals方法进行排序是可能的

 public class Employee {

private String name;
private int id;

public String getName() {
    return name;
}

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + id;
//  result = prime * result + ((name == null) ? 0 : name.hashCode());
    System.out.println("hashcode value :::"+result + "id :::"+id);
    return result;
}

@Override
public boolean equals(Object obj) {
    if (this == obj) {
        return true;
    }
    if (obj == null) {
        return false;
    }
    if (getClass() != obj.getClass()) {
        return false;
    }
    Employee other = (Employee) obj;
    if (id != other.id) {
        return false;
    }
    if (name == null) {
        if (other.name != null) {
            return false;
        }
    } else if (!name.equals(other.name)) {
        return false;
    }
    return true;
}

public void setName(String name) {
    this.name = name;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}
}

对于某些样本,它不起作用

 2 35 4 3  and output 2 35 3 4

你是如此的接近。这个

Map<Employee, String> linkedHashMap = new HashMap<Employee,String>();
如果它应该按自然顺序排序,请使用

Map linkedHashMap=newtreemap();

不,不是。HashMap不是排序映射,如果使用排序映射,您将需要一个比较器,因为如果没有比较器,您无法判断某个东西是更大、更低还是等于其他东西。
仅基于hashcode和equals方法进行排序。
。那会怎么样
hashCode
返回一个值,该值用于沿包含
HashMap
的内部数组分散条目,而
equals
比较两个对象是否相等,并返回一个
布尔值,说明对象是否相等。如果你从来不说哪个对象应该在另一个之前,你会如何根据这两种方法进行排序?我的意思是,如果你想进行排序,你需要进行比较。这是基础数学和基本常识。你不能基于相等和用于分隔内容的值进行排序。谢谢你的回答如果使用树形图,那么我需要实现与employee类类似的接口,但我不希望这样,可以使用hashcode和equals进行排序method@Raju使用hashcode和equals方法No进行排序是任何可能的。要使hashcode正常工作,哈希必须分布良好。这意味着它们基本上不能用于排序。@Raju您如何基于hashCode和equals进行排序?如果两个对象具有相同的哈希代码,但相等-哪一个优先?您可以创建一个比较器并将其指向hashCode,但按此排序的值是否比随机排序的值更好?
 2 35 4 3  and output 2 35 3 4
Map<Employee, String> linkedHashMap = new HashMap<Employee,String>();
Map<Employee, String> linkedHashMap = new LinkedHashMap<>();
Map<Employee, String> linkedHashMap = new TreeMap<>();