プロパティキーと値を持つ次のHashMapがあります。
private HashMap<String, Object> prop_values;
そのインスタンスの1つが別のインスタンスと等しいかどうかを確認する必要があります。過去に、私はこれをしました:
if (prop_values_1.equals(prop_values_2)){
// do something
}
そして、これは私がObject[]
価値として得るまで機能しました。したがって、私の前の式は常に任意の値false
でそのようなものを返しました。HashMap
Object[]
だから、私はこのメソッドを実装する必要があります:
private boolean isPropValuesEquals(HashMap<String, Object> pv1, HashMap<String, Object> pv2){
boolean isEquals = true;
if (pv1 == null || pv2 == null){
return false;
}
if (!pv1.keySet().equals(pv2.keySet())){
return false;
}
for (String key : pv1.keySet()){
Object cur_pv1 = pv1.get(key);
Object cur_pv2 = pv2.get(key);
if (cur_pv1 instanceof Object[]){
if (cur_pv2 instanceof Object[]){
isEquals = Arrays.equals((Object[])cur_pv1, (Object[])cur_pv2);
} else {
return false;
}
} else {
isEquals = isEquals && cur_pv1.equals(cur_pv2);
}
if (!isEquals){
return false;
}
}
return isEquals;
}
それは機能しますが、それはある種のハックのようであり、これが私が必要とするものを達成するための最良の方法であるかどうかはわかりません。
したがって、ここに2つの質問があります。
Object []。equals()がArrays.equals()と同じではないのはなぜですか?痛そうです。
HashMap<String, Object>
値が?である可能性がある場合、比較するためのより良い方法はありObject[]
ますか?