3

假设我有代码

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 中做到这一点?编辑:如果我想比较哈希表中的键或实际值

4

3 回答 3

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());
        }
    }
}
于 2012-04-12T16:42:45.967 回答
1

如果您想找出它们有哪些共同的键值组合,请使用类似

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

并且entries只有两个映射中具有相同键和值的条目。

或者,仅供参考,Guava 提供了Maps.difference,它可以让您同时挑选出共同的条目,具有不同值但相同键的条目,以及具有不在另一个映射中的键的条目。

于 2012-04-12T16:39:37.333 回答
0

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

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

比较这些值有点棘手,取决于您的要求。您的具体要求是什么?

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

于 2012-04-12T16:34:52.277 回答