2011-08-01 12 views
7

HashMapに値を表示したいとします。 HashMapは値が重複していてもかまいませんが(重複キーはありません)、値を1回だけ表示したいと考えています。Javaマップで重複した値を検索しますか?

したがって、Mapに重複値があるかどうかを調べる必要があります。私はMapを反復処理して、返り値の論理値をmap.containsValue(value)とすることができます。マップに重複した値を見つける方法があるかどうか、コードを書くべきかどうかを知りたいですか?

答えて

19

簡単な解決策は、値リストのサイズと値のセットを比較することです。

+0

このコードを試してみて、これは、この技術は素晴らしいですそれ自体で有効なコードではなく、擬似コード:) – Nivas

+0

です。私は重複を削除したい場合は、手動で操作を削除する必要がありますか? – Silambarasan

+0

はい、手動で操作する必要があります。しかし、あなたが私に* exact *シナリオを説明することができれば、同じ価値を持つ複数のキーで終わる方法と、なぜそれらを削除したいのかなど、もっと良い解決法を提案できます。 –

1

jdk1.6のような方法はありません。あなたが行うことができます

1つの簡単な方法は、

  • がリストに重複に
5

例を削除しますセットに一覧表示

  • プットをマップからすべての値を取得することです。

    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] 
    
  • 1

    使用はApache Commonsのライブラリクラスのメソッド

    org.apache.commons.collections.MapUtils.invertMap(map) 
    

    と実際のマップと反転マップの大きさを比較します。

    0

    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; 
    
    } 
    
    0
    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()); 
        } 
    } 
        } 
    } 
    
    関連する問題