私は、同じキーを含むが異なる値(文字列)を含むことができる2つのPropertiesインスタンスを持っています。両方のインスタンスで値が同じかどうかを確認する最適な方法は何ですか。条件は2つのプロパティオブジェクトの値を比較する最適な方法は何ですか?
if(!p1.getProperty("x").equals(p2.getProperty("x")) {
return true;
}
私は、同じキーを含むが異なる値(文字列)を含むことができる2つのPropertiesインスタンスを持っています。両方のインスタンスで値が同じかどうかを確認する最適な方法は何ですか。条件は2つのプロパティオブジェクトの値を比較する最適な方法は何ですか?
if(!p1.getProperty("x").equals(p2.getProperty("x")) {
return true;
}
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) { ... }
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;
}
プロパティの性質はオブジェクトであれば、ハッシュコードとの比較もよくなりますが、キーの交点(または和集合)を検索するだけです。もしそれらがプリミティブであれば、あなたが投稿した例が2つの文字列を比較しているかというと、== – Eliethesaiyan
を使うことができます。 – LazerBanana
@Eliethesaiyanは、Javaプロパティでは文字列です。 'Properties'クラスのドキュメンテーションはそう言います。そして、同じハッシュコードを持つことができる多くの文字列があるので、ハッシュコードを決して比較しないでください。 – RealSkeptic