как сохранить объекты в hashmap в качестве ключа и вставить его в порядке возрастания без использования компаратора и компилируемого - PullRequest
0 голосов
/ 24 ноября 2018

Я хочу сохранить Объекты в Хэш-карте в качестве ключа, и во время Извлечения времени я хочу возрастающий порядок, основанный на идентификаторе сотрудника. И я не хочу использовать компаратор или сопоставимые интерфейсы, просто сортировка, основанная на хэш-коде и методе равенства, возможна ли.

 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;
}

}

package info.test;

 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;

  public class MainClass {

public static void main(String[] args) {

    Employee e1 = new Employee();
    e1.setId(2);
    e1.setName("name");
    Employee e2 = new Employee();
    e2.setId(35);
    e2.setName("name");
    Employee e3 = new Employee();
    e3.setId(4);
    e3.setName("name");
    Employee e4 = new Employee();
    e4.setId(3);
    e4.setName("name");

    Map<Employee, String> linkedHashMap = new HashMap<Employee,String>();
    linkedHashMap.put(e1, "e");
    linkedHashMap.put(e2, "e");
    linkedHashMap.put(e3, "e");
    linkedHashMap.put(e4, "e");


     Set<Employee> keySet = linkedHashMap.keySet();
     for(Employee e:keySet){
        //System.out.println(e.getId()); 
     }


}}

его работы некоторые образцы, такие как

 if give ids like 2 55 4 3  and output is 2 3 4 55

, а для некоторых образцов он не работает

 2 35 4 3  and output 2 35 3 4

1 Ответ

0 голосов
/ 24 ноября 2018

Вы были , поэтому близко.Это

Map<Employee, String> linkedHashMap = new HashMap<Employee,String>();

должно быть LinkedHashMap, которое сохранило порядок вставки как

Map<Employee, String> linkedHashMap = new LinkedHashMap<>();

Если оно должно быть отсортировано в естественный порядок использовать TreeMap как

Map<Employee, String> linkedHashMap = new TreeMap<>();
...