如何比较哈希表中的值或键?

时间:2012-04-12 16:29:19

标签: java

假设我有代码

public static void main(String args[])
{
    Hashtable ht = new Hashtable();
    Hashtable ht2 = new Hashtable();
    for(int i=0;i<100;i++)
    {
        ht.put(i, new Integer (i));
    }
    for(int i=50;i<100;i++)
    {
        ht2.put(i, new Integer (i));
    }
}

如果我想比较两个不同的哈希表,我将如何在Java中执行此操作?编辑:如果我想比较哈希表中的键或实际值

3 个答案:

答案 0 :(得分:2)

这将打印出所有公共键/值对:

public static void main(String args[])
{
    Map<Integer, Integer> ht = new HashMap<Integer, Integer>();
    Map<Integer, Integer> ht2 = new HashMap<Integer, Integer>();
    for(int i=0;i<100;i++)
    {
        ht.put(i, i);
    }
    for(int i=50;i<100;i++)
    {
        ht2.put(i, i);
    }

    System.out.println("The following keys and values match:");

    for (Map.Entry<Integer, Integer> htEntries : ht.entrySet()) {
        if(ht2.containsKey(htEntries.getKey()) && ht2.get(htEntries.getKey()).equals(htEntries.getValue())){
            System.out.println("\tKey: " + htEntries.getKey() + " Value: " + htEntries.getValue());
        }
    }
}

答案 1 :(得分:1)

如果您想了解它们共有的键值组合,请使用类似

的内容
 HashSet<Entry<Integer, Integer>> entries = new HashSet<Entry<Integer, Integer>>(
   table1.entrySet());
 entries.retainAll(table2.entrySet());

entries只有两个地图中具有相同键和值的条目。

或者,FYI,Guava提供Maps.difference,它允许您选择共同的条目,具有不同值但具有相同键的条目,以及具有不在其他地图中的键的条目,全部在一次。

答案 2 :(得分:0)

如果要比较两个映射是否相同,请使用ht.equals(ht2)

要仅比较密钥,请使用ht.keySet().equals(ht2.keySet())

比较这些值有点棘手,并且取决于您的要求。你的要求究竟是什么?

P.S。 Hashtable已过时;在大多数情况下,HashMap<Integer,Integer>应该是首选。