2017-06-22 65 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; 
} 
相关问题