2017-06-22 97 views
-1

我有兩個包含相同鍵的屬性實例,但可能包含不同的值(字符串)。檢查兩個實例中值是否相同的最佳方法是什麼?比較兩個Properties對象中的值的最佳方法是什麼?

現在我使用if條件檢查類似下面

if(!p1.getProperty("x").equals(p2.getProperty("x")) { 
    return true; 
} 
+0

什麼是財產的性質,如果屬性是一個對象,你也比較好比較的哈希碼,但如果它們是原始的,就我而言,您可以使用== – Eliethesaiyan

+0

您發佈的示例是比較2個字符串。 – LazerBanana

+1

@Eliethesaiyan根據定義,Java屬性是字符串。 「屬性」類文檔是這樣說的。因爲許多字符串可以具有相同的哈希碼,所以您絕對不應該*比較哈希碼。 – RealSkeptic

回答

3

PropertiesHashTable一個子類,它覆蓋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) { ... } 
0
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; 
} 
相關問題