Java 为什么HashMap值在执行多次时返回null和字符串值?

Java 为什么HashMap值在执行多次时返回null和字符串值?,java,hashmap,Java,Hashmap,这是我的密码: package AbstractClassesTwo; class X { private int n; public X(int n){ this.n = n; } public String toString(){ return "[" + n + " ]"; } public boolean equals (Object obj){ boolean b = false;

这是我的密码:

package AbstractClassesTwo;

class X {
    private int n;

    public X(int n){
        this.n = n;
    }

    public String toString(){
        return "[" + n + " ]";
    }

    public boolean equals (Object obj){
        boolean b = false;
        if(obj instanceof X){
            X x = (X)obj;
            b = this.n == x.n;
        }

        return b;
    }

    public int hashCode(){
        return n;
    }

}
驾驶员级别:

package AbstractClassesTwo;

import java.util.HashMap;

public class UseX {

    public static void main (String[] args){

        X x1 = new X(1);
        X x2 = new X(2);

        String s1 = "1 ett one";
        String s2 = "2 två two";

        HashMap<X, String> t = new HashMap<X, String>();
        t.put(x1, s1);
        t.put(x1, s2);

        int i = (int) (2 * Math.random() + 1);
        X n = new X(i);
        String s = (String)t.get(n);

        System.out.println(n + ": " + s);

    }
}
package-AbstractClassesTwo;
导入java.util.HashMap;
公共类UseX{
公共静态void main(字符串[]args){
X x1=新的X(1);
X x2=新的X(2);
字符串s1=“1一”;
字符串s2=“2 två2”;
HashMap t=新的HashMap();
t、 put(x1,s1);
t、 put(x1,s2);
int i=(int)(2*Math.random()+1);
xn=新的X(i);
字符串s=(字符串)t.get(n);
System.out.println(n+“:”+s);
}
}
当执行多次时,值s返回空值和字符串值(
“2 tvåtwo”

t.put(x1, s1);
t.put(x1, s2);
      ^^
那不应该是
x2
?每当你寻找一个
新的X(2)
,你就会得到
null


那不应该是
x2
?每当你寻找一个新的X(2),你就会得到一个空的
null

,这真的很难理解混乱的格式。我认为HashMap无序可能是你的问题。试着改用LinkedHashMap。这很难理解混乱的格式。我认为HashMap无序可能是你的问题。尝试改用LinkedHashMap。