2017-06-22 5 views
-1

私は、同じキーを含むが異なる値(文字列)を含むことができる2つのPropertiesインスタンスを持っています。両方のインスタンスで値が同じかどうかを確認する最適な方法は何ですか。条件は2つのプロパティオブジェクトの値を比較する最適な方法は何ですか?

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

プロパティの性質はオブジェクトであれば、ハッシュコードとの比較もよくなりますが、キーの交点(または和集合)を検索するだけです。もしそれらがプリミティブであれば、あなたが投稿した例が2つの文字列を比較しているかというと、== – Eliethesaiyan

+0

を使うことができます。 – LazerBanana

+1

@Eliethesaiyanは、Javaプロパティでは文字列です。 'Properties'クラスのドキュメンテーションはそう言います。そして、同じハッシュコードを持つことができる多くの文字列があるので、ハッシュコードを決して比較しないでください。 – RealSkeptic

答えて

3

Propertiesの下のようにチェックする場合

今私が使用していますequalsをオーバーライドするHashTableのサブクラスです。あなたは、単にequalsを使用してインスタンスを比較することができます

properties1.equals(properties2) 

しかし、これはあなたにが異なる何を教えてくれません。これは、それがために値を探すという意味で、非対称であることを

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. 
} 

注:properties.keySet()を使用して、キーを取得することができ、それを行う、その後、2つのインスタンス間で値を比較する

値は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; 
} 
関連する問題