Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何比较哈希表中的值或键?_Java - Fatal编程技术网

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

Java 如何比较哈希表中的值或键?,java,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.pu

假设我有代码

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));
    }
}
publicstaticvoidmain(字符串参数[])
{
Hashtable ht=新的Hashtable();
Hashtable ht2=新的Hashtable();

对于(int i=0;i如果要比较两个映射是否相同,请使用
ht.equals(ht2)

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

比较这些值有点棘手,这取决于您的需求。您的需求到底是什么


另外,Hashtable已经过时;
HashMap
在大多数情况下应该是首选。

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

 HashSet<Entry<Integer, Integer>> entries = new HashSet<Entry<Integer, Integer>>(
   table1.entrySet());
 entries.retainAll(table2.entrySet());
HashSet条目=新HashSet(
表1.entrySet());
entries.retainal(表2.entrySet());
条目
将只包含两个映射中具有相同键和值的条目


或者,仅供参考,Guava提供了一个选项,可让您同时选择具有共同点的条目、具有不同值但具有相同键的条目以及具有不在其他地图中的键的条目。

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

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());
        }
    }
}
publicstaticvoidmain(字符串参数[])
{
Map ht=新的HashMap();
Map ht2=新的HashMap();

对于(int i=0;i)您想确定整个哈希表是否相等吗?您所说的“比较”是什么意思?你能举个例子吗?如果可以的话,也可以使用
HashMap
。对不起,我不够清楚。我想比较其中的一个键或值。如果ht有键1,2,3,4,5,ht2有键4,5,6,7,8,我怎么知道它们都有4,5相同的键。值也是一样的。如果ht有键1,2,3,4,5和值1,2,3,4,5,ht2有键的地方呢6,7,8,9,0,值为4,5,6,7,8。在这种情况下,我们有不同的键,但值为4和5相同。因此,您是否希望确定哪些键和值重叠?非常感谢!这非常有用!如果可能,您可以详细说明最后一个for循环是如何工作的吗?再次感谢!它只是比较所有映射项(键/值对)在ht和ht2之间。值得注意的是,这与Louis Wasserman的答案相似。