我有兩個包含相同鍵的屬性實例,但可能包含不同的值(字符串)。檢查兩個實例中值是否相同的最佳方法是什麼?比較兩個Properties對象中的值的最佳方法是什麼?
現在我使用if條件檢查類似下面
if(!p1.getProperty("x").equals(p2.getProperty("x")) {
return true;
}
我有兩個包含相同鍵的屬性實例,但可能包含不同的值(字符串)。檢查兩個實例中值是否相同的最佳方法是什麼?比較兩個Properties對象中的值的最佳方法是什麼?
現在我使用if條件檢查類似下面
if(!p1.getProperty("x").equals(p2.getProperty("x")) {
return true;
}
Properties
是HashTable
一個子類,它覆蓋equals
。你可以簡單地比較使用equals
實例:
properties1.equals(properties2)
但這不會告訴你什麼是不同。
要做到這一點,你可以使用properties.keySet()
鍵,然後比較這兩個實例之間的值:
for (String key : properties1.keySet()) {
String value1 = properties1.get(key);
String value2 = properties2.get(key);
// Compare, e.g. value1.equals(value2).
// But may need to take into account missing values.
}
注意,這是不對稱的,在這個意義上,它看起來對於其值值存在於properties1
。如果你要搜索鍵的交集(或聯合),只是建立一個集第一:
Set<String> keys = new HashSet<>(properties1.keySet());
// For intersection:
keys.retainAll(properties2.keySet());
// For union:
// keys.addAll(properties2.keySet());
for (String key : keys) { ... }
String value=p1.getProperty("x");
if (value == null) {
if (!(p2.getProperty("x")==null && p2.containsKey("x")))
return true;
} else {
if (!value.equals(p2.getProperty("x")))
return true;
}
什麼是財產的性質,如果屬性是一個對象,你也比較好比較的哈希碼,但如果它們是原始的,就我而言,您可以使用== – Eliethesaiyan
您發佈的示例是比較2個字符串。 – LazerBanana
@Eliethesaiyan根據定義,Java屬性是字符串。 「屬性」類文檔是這樣說的。因爲許多字符串可以具有相同的哈希碼,所以您絕對不應該*比較哈希碼。 – RealSkeptic