当前位置: 首页 > 面试题库 >

如何通过两个地图的值比较

洪国兴
2023-03-14
问题内容

如何通过两个地图的值比较?我有两个包含相等值的地图,并希望通过它们的值进行比较。这是一个例子:

    Map a = new HashMap();
    a.put("foo", "bar"+"bar");
    a.put("zoo", "bar"+"bar");

    Map b = new HashMap();
    b.put(new String("foo"), "bar"+"bar");
    b.put(new String("zoo"), "bar"+"bar");

    System.out.println("equals: " + a.equals(b));            // obviously false

我应该如何更改代码以获取真实信息?


问题答案:

您尝试使用串联构造不同的字符串将失败,因为它是在编译时执行的。这些地图都有一对。每对将使用相同的字符串引用将“ foo”和“ barbar”作为键/值。

假设您确实要比较值集而不需要任何键的引用,则只是以下一种情况:

Set<String> values1 = new HashSet<>(map1.values());
Set<String> values2 = new HashSet<>(map2.values());
boolean equal = values1.equals(values2);

可能 是比较map1.values()map2.values()将工作-
但它也有可能是在他们返回的顺序将在平等的比较,这是不是你想要的使用。

请注意,使用集合有其自身的问题-因为上述代码会将{“ a”:“ 0”,“ b”:“ 0”}和{“ c”:“ 0”}的映射视为相等。毕竟,值集是相等的。

如果您可以提供更严格的定义,那么确保我们给您正确的答案会更加容易。



 类似资料:
  • 问题内容: 我有两个地图声明为。在这里可以是另一个(依此类推)。我想检查两个地图是否完全相同,但不知道其深度。除了使用递归,我还可以比较每个地图上被调用的输出吗?还是有比较简单的方法比较地图? 问题答案: 快速回答 您应该使用该方法,因为已经实现了该方法以执行所需的比较。本身就像使用迭代器一样,但这是一种效率较低的方法。另外,正如@Teepeemm所指出的那样,它受元素顺序的影响(基本上是迭代器的

  • 问题内容: 我想比较两种类型的变量。现在,我想知道两个变量中的哪个大于另一个或相等。不幸的是,我还不知道确切的类型,我只知道它将是的子类型。我怎样才能做到这一点? 编辑 :我尝试了使用s的另一种解决方法,它实际上可以自然排序(当然,除了AtomicInteger和AtomicLong之外,实现的所有子类都可以工作)。因此,我将丢失重复的值。使用s时,由于绑定不匹配,将不接受我的列表。非常不满意。

  • 问题内容: 尝试查看是否有任何JavaScript库功能可以合并两个json对象的特定键的值 使用$ .extend和$ .merge给出以下结果 我正在寻找的是 问题答案: 您想深入扩展

  • 问题内容: Java中两个double值的简单比较会产生一些问题。让我们考虑以下Java中的简单代码段。 上面的代码似乎返回,表达式的求值,但是没有。它之所以返回,是因为该表达式的求值实际上是预期的因此不等于,因此条件的求值为。解决这种情况的最佳建议方法是什么? 问题答案: 基本上,你不应该进行精确比较,而应该执行以下操作:

  • 问题内容: 我有两个Arraylist 其包含以下值是 AllProcessList arraylist包含所有Java进程,RunningProcessList arraylist包含当前正在运行的进程。我想比较这两个arraylist并显示是否未运行该进程。例如,比较两个列表并要显示以下进程未运行。 我使用了以下代码,但无法正常工作。 问题答案: 查看List的文档,尤其是removeAll(

  • 问题内容: 我有两张桌子要赞扬。列之一是CLOB类型。我想做这样的事情: 不幸的是,Oracle无法对Clob执行减号操作。我怎样才能做到这一点? 问题答案: 格式是这样的: 如果dbms_lob.compare(lob1,lob2)= 0,则它们是相同的。 这是一个基于您的示例的示例查询: