HashMap
に値を表示したいとします。 HashMap
は値が重複していてもかまいませんが(重複キーはありません)、値を1回だけ表示したいと考えています。Javaマップで重複した値を検索しますか?
したがって、Map
に重複値があるかどうかを調べる必要があります。私はMap
を反復処理して、返り値の論理値をmap.containsValue(value)
とすることができます。マップに重複した値を見つける方法があるかどうか、コードを書くべきかどうかを知りたいですか?
HashMap
に値を表示したいとします。 HashMap
は値が重複していてもかまいませんが(重複キーはありません)、値を1回だけ表示したいと考えています。Javaマップで重複した値を検索しますか?
したがって、Map
に重複値があるかどうかを調べる必要があります。私はMap
を反復処理して、返り値の論理値をmap.containsValue(value)
とすることができます。マップに重複した値を見つける方法があるかどうか、コードを書くべきかどうかを知りたいですか?
簡単な解決策は、値リストのサイズと値のセットを比較することです。
jdk1.6のような方法はありません。あなたが行うことができます
1つの簡単な方法は、
例を削除しますセットに一覧表示
Map<Object, Object> map = new HashMap<Object, Object>();
map.put(1,2);
map.put(3,4);
map.put(2,2);
map.put(5,3);
Set<Object> uniqueValues = new HashSet<Object>(map.values());
System.out.println(uniqueValues);
出力:
[2, 3, 4]
使用はApache Commonsのライブラリクラスのメソッド
org.apache.commons.collections.MapUtils.invertMap(map)
と実際のマップと反転マップの大きさを比較します。
private boolean hasDuplicates(Map<Integer, List<String>> datamap){
boolean status = false;
Set valueset=new HashSet(datamap.values());
if(datamap.values().size()!=valueset.size()){
status=true;
}
else{
status = false;
}
return status;
}
try this code but this is not optimize code :
public class HashMapDulicate {
public static void main(String[] args) {
Map<String,Integer> map=new HashMap<>();
map.put("A", 1);
map.put("B", 1);
map.put("C", 3);
map.put("D", 4);
Set set=new HashSet<>();
List list=new ArrayList<>();
for(Entry<String, Integer> mapVal:map.entrySet()) {
if(!set.add(mapVal.getValue())) {
list.add(mapVal.getValue());
}else {
set.add(mapVal.getValue());
}
}
for(Entry<String, Integer> mapVal:map.entrySet()) {
if(list.contains(mapVal.getValue())){
System.out.println(mapVal.getKey() +":" + mapVal.getValue());
}
}
}
}
このコードを試してみて、これは、この技術は素晴らしいですそれ自体で有効なコードではなく、擬似コード:) – Nivas
です。私は重複を削除したい場合は、手動で操作を削除する必要がありますか? – Silambarasan
はい、手動で操作する必要があります。しかし、あなたが私に* exact *シナリオを説明することができれば、同じ価値を持つ複数のキーで終わる方法と、なぜそれらを削除したいのかなど、もっと良い解決法を提案できます。 –