我在填充地图,每个条目都成为每个条目。我不知道这是怎么发生的。映射多个键,相同的值
public Map<Register, String> regFileList = new HashMap<Register, String>();
/** $zero always zero (by hardware) */
public Register zero = new Register(0);
// ....再加上其它所有寄存器宣布...
private void populateRegFileList(){
zero.setRegNumber(0);
zero.setRegName("$zero");
zero.setWord("0x00000000");
regFileList.put(zero, zero.getWord());
at.setRegNumber(1);
at.setRegName("$at");
at.setWord("0x00000000");
regFileList.put(at, at.getWord());
v0.setRegNumber(2);
v0.setRegName("$v0");
v0.setWord("0x00000000");
regFileList.put(v0, v0.getWord());
a0.setRegNumber(3);
a0.setRegName("$a0");
a0.setWord("0x00000000");
regFileList.put(a0, a0.getWord());
a1.setRegNumber(4);
a1.setRegName("$a1");
a1.setWord("0x00000000");
regFileList.put(a1, a1.getWord());
a2.setRegNumber(5);
a2.setRegName("$a2");
a2.setWord("0x00000000");
regFileList.put(a2, a2.getWord());
a3.setRegNumber(6);
a3.setRegName("$a3");
a3.setWord("0x00000000");
regFileList.put(a3, a3.getWord());
a4.setRegNumber(7);
a4.setRegName("$a4");
a4.setWord("0x00000000");
regFileList.put(a4, a4.getWord());
s0.setRegNumber(8);
s0.setRegName("$s0");
s0.setWord("0x00000000");
regFileList.put(s0, s0.getWord());
s1.setRegNumber(9);
s1.setRegName("$s1");
s1.setWord("0x00000000");
regFileList.put(s1, s1.getWord());
s2.setRegNumber(10);
s2.setRegName("$s2");
s2.setWord("0x00000000");
regFileList.put(s2, s2.getWord());
s3.setRegNumber(11);
s3.setRegName("$s3");
s3.setWord("0x00000000");
regFileList.put(s3, s3.getWord());
k0.setRegNumber(12);
k0.setRegName("$k0");
k0.setWord("0x00000000");
regFileList.put(k0, k0.getWord());
sp.setRegNumber(13);
sp.setRegName("$sp");
sp.setWord("0x00000000");
regFileList.put(sp, sp.getWord());
fp.setRegNumber(14);
fp.setRegName("$fp");
fp.setWord("0x00000000");
regFileList.put(fp, fp.getWord());
ra.setRegNumber(15);
ra.setRegName("$ra");
ra.setWord("0x00000000");
regFileList.put(ra, ra.getWord());
System.out.println(regFileList);
}
打印:{$ RA = 00000000,$ RA = 00000000,$ RA = 00000000,$ RA = 00000000 ,$ ra = 0x00000000,$ ra = 0x00000000,$ ra = 0x00000000,$ ra = 0x00000000,$ ra = 0x00000000,$ ra = 0x00000000,$ ra = 0x00000000,$ ra = 0x00000000,$ ra = 0x00000000,$ ra = 0x00000000 ,$ ra = 0x00000000,$ ra = 0x00000000}
关于这种情况的任何想法?如果我将打印语句移到更早的位置,它会打印正确的条目数量,但全部完全相同。
寄存器的equals和hashcode方法是如何实现的? – dunni
你可以在寄存器中分享equals()吗? – Jan
你在哪里初始化变量?每个寄存器是否都用'new'初始化? 'regName'和其他没有被声明为'static'是吗? – Kayaman