对不起,如果这个问题不清楚。我对散列表的知识非常有限。这是面试时向我提出的问题。如果所有密钥的哈希码相同,HashMap排序如何工作
如果所有对象都返回相同的hascode,并且如果我们使用这些对象作为key存储在hashmap中。如何在这种情况下排序工作?
我的理解是,如果散列码相同,那么新条目将替换散列映射中的旧条目。
但是当我搜索了解更多关于散列表如何工作如果两个对象的散列码是相同的,我foudn这两个对象将存储在链接列表形式的存储桶中。
但不清楚在这种情况下如何排序。如果我们尝试使用TreeMap对这个hashpMap进行排序。
请帮我理解这一点。
下面的代码在hashmap中存储多个条目,其中所有对象的hashcode都是相同的。
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
public class Employee implements Comparable
{
private String name;
private int age;
public Employee(String name, int age)
{
this.name = name;
this.age = age;
}
@Override
public String toString()
{
return name + ": " + age;
}
@Override
public int hashCode(){
return 1;
}
@Override
public boolean equals(Object o){
if (!(o instanceof Employee))
return false;
Employee e = (Employee) o;
return e.getName().equals(name) && e.getAge() == age;
}
String getName()
{
return name;
}
int getAge()
{
return age;
}
public static void main(String a[]){
Employee e = new Employee("Sub" , 25);
Employee e1 = new Employee("Sub1" , 20);
Employee e2 = new Employee("Sub2" , 22);
System.out.println(e);
Map m = new HashMap();
m.put(e , "A");
m.put(e1 , "B");
m.put(e2 , "C");
System.out.println(m);
TreeMap t = new TreeMap(m);
System.out.println(t);
}
@Override
public int compareTo(Object arg0) {
return ((Employee)arg0).getName().compareTo(this.name);
}
}
排序? 'HashMap'不做任何排序。 – SudoRahul
是的,HashMap没有排序。从[javadocs](http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html):'这个类不能保证地图的顺序;'你'你需要更清楚你的意思,或者你的问题可能会被关闭 –