キーがArrayListであり、入力がJVMによって行われるかどうかを確認するには、以下のコードを確認してください。 ここに書きますTesthashCodeEqualsクラスのhashCodeとequalsメソッド
package com.msq;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
class TesthashCodeEquals {
private int a;
private int b;
public TesthashCodeEquals() {
// TODO Auto-generated constructor stub
}
public TesthashCodeEquals(int a, int b) {
super();
this.a = a;
this.b = b;
}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
public int hashCode() {
return this.a + this.b;
}
public boolean equals(Object o) {
if (o instanceof TesthashCodeEquals && o != null) {
TesthashCodeEquals c = (TesthashCodeEquals) o;
return ((this.a == c.a) && (this.b == c.b));
} else
return false;
}
}
public class HasCodeEquals {
public static void main(String[] args) {
Map<List<TesthashCodeEquals>, String> m = new HashMap<>();
List<TesthashCodeEquals> list1=new ArrayList<>();
list1.add(new TesthashCodeEquals(1, 2));
list1.add(new TesthashCodeEquals(3, 4));
List<TesthashCodeEquals> list2=new ArrayList<>();
list2.add(new TesthashCodeEquals(10, 20));
list2.add(new TesthashCodeEquals(30, 40));
List<TesthashCodeEquals> list3=new ArrayList<>();
list3.add(new TesthashCodeEquals(1, 2));
list3.add(new TesthashCodeEquals(3, 4));
m.put(list1, "List1");
m.put(list2, "List2");
m.put(list3, "List3");
for(Map.Entry<List<TesthashCodeEquals>,String> entry:m.entrySet()){
for(TesthashCodeEquals t:entry.getKey()){
System.out.print("value of a: "+t.getA()+", value of b: "+t.getB()+", map value is:"+entry.getValue());
System.out.println();
}
System.out.println("######################");
}
}
}
。
output:
value of a: 10, value of b: 20, map value is:List2
value of a: 30, value of b: 40, map value is:List2
######################
value of a: 1, value of b: 2, map value is:List3
value of a: 3, value of b: 4, map value is:List3
######################
これにより、List内のオブジェクトの数とobject内のvalriabeの値がチェックされます。オブジェクトの数が同じで、インスタンス変数の値も同じ場合は、重複キーとみなしてキーをオーバーライドします。
今はLIST3
list3.add(新しいTesthashCodeEquals(2、2))上のオブジェクトの値のみを変更した場合。
それが印刷されます:
output
value of a: 2, value of b: 2, map value is:List3
value of a: 3, value of b: 4, map value is:List3
######################
value of a: 10, value of b: 20, map value is:List2
value of a: 30, value of b: 40, map value is:List2
######################
value of a: 1, value of b: 2, map value is:List1
value of a: 3, value of b: 4, map value is:List1
######################
それは常にリスト内のオブジェクトの数と、オブジェクトのインスタンス変数の値をチェックするように。私はこのソリューションを作ってみた
おかげ
私はセッターを除外して不変にします。おそらく建設後にそのクラスのオブジェクトを変更する理由はありません。 –
+1 - 実際には、これはおそらく**スペースを節約します。なぜなら、Bigramクラスは32ビットの 'length'フィールドのオーバーヘッドを持たないからです。 –