假设我有代码
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中执行此操作?编辑:如果我想比较哈希表中的键或实际值
答案 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>
应该是首选。