我有以下带有属性键和值的 HashMap:
private HashMap<String, Object> prop_values;
我需要检查它的一个实例是否等于另一个实例。在过去,我只是这样做:
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;
}
它有效,但它似乎是某种黑客,我不确定这是实现我需要的最佳方式。
所以,这里有两个问题:
为什么 Object[].equals() 与 Arrays.equals() 不一样?似乎很痛苦。
有没有更好的比较方法
HashMap<String, Object>
,如果值可以是Object[]
?