当前位置: 首页 > 知识库问答 >
问题:

Java-如何检查ArrayList中是否有一个值是HashMap中键的值?

阳凌
2023-03-14
if (!mainMethods.matrix.isEmpty()) {
    for (int i = 0; i < mainMethods.matrix.values().size(); i++) {
        if (mainMethods.matrix.containsValue(getArrayList()[i].getValue().toString().contains(textValue.getText()))) {
            String errorTitle = "Impossível completar a operação.";
            String errorMessage = "Não é possível adicionar um valor de chave repetido.";
            JOptionPane.showMessageDialog(getParent(), errorMessage, errorTitle, JOptionPane.ERROR_MESSAGE);            
        }
    }

有一个名为“矩阵”的哈希图,它有很多键。每个键的值都是一个具有自己值的ArrayList。考虑到这一点,我无法找到一种方法来测试ArrayList值中是否有特定值,因为如果我将字符串参数传递给HashMap的方法“.containsValue()”,该方法将找到ArrayList对象,测试将为false。因此,我必须做一些相当疯狂的事情,就像我在例子中所做的那样。正如您所看到的,没有像“getArrayList()”或“getValue()”这样的东西。这是一个非常复杂的情况,我试图用“伪代码”来解释我的观点。

你知道怎么解决吗?

共有3个答案

董桐
2023-03-14

您可以使用迭代器并单独检查每个数组列表:

Iterator it = mainMethod.matrix.entrySet().iterator();
while (it.hasNext()) {
    Map.Entry pairs = (Map.Entry)it.next();
    If(pairs.getValue().contains(your value)
    {
        // do stuff
    }
}
白智
2023-03-14

做一件事。将数据结构更改为。。。

旧的是:

HashMap <Key, ArrayList>

更改为

<代码>哈希映射

这是假设你在arrayList中有不可变的对象。所以现在一旦你使用键得到一个对象。您可以再次使用它的键在内部映射中搜索。

匡玉堂
2023-03-14

如果我没理解错的话,这样的事情应该有用:

private <K, V> V getValueIfKeyContains(final Map<List<K>, V> map, final K desiredKey) {
    for (final Entry<List<K>, V> entry : map.entrySet()) {
        if (entry.getKey().contains(desiredKey)) {
            return entry.getValue();
        }
    }
    return null;
}

因此,您可以在地图上循环,检查每个键是否包含所需的键。

我强烈推荐两件事:

  1. 不要将可变值用作映射中的键。这会导致大量问题,因为它们在添加到地图后可能会发生变化
  2. 如果要检查包含的内容,请不要使用列表。这是一个O(n)操作,即所需时间与列表的大小成比例。它必须循环遍历列表中的每个元素,直到找到正确的元素为止。使用设置,操作变为O(1),即恒定时间
 类似资料:
  • 我需要检查一个arraylist中的任何值是否存在于另一个arraylist中: 它打印“它不包含”。我需要知道是否有方法比较这两个arraylist,如果其他arraylist中存在任何值,它应该返回。我知道迭代可以有所帮助。有什么简单的方法可以做到这一点吗?

  • 今天好,这有点让我迷惑(大脑冻结!)好像少了些什么。有一个我用HashMap填充的ArrayList。现在我放入了我的HashMap和ArrayList。 由于am解析JSON,arraylist的大小显著增加。现在我的问题是如何从ArrayList中的两个映射键中获得值?我试过这个 但我似乎不能得到所有的值。映射大小总是返回值2,这只是元素。如何从ArrayList中的映射键获取所有值?谢谢

  • 问题内容: 如何检查扫描仪中写入的值是否存在? 问题答案: 只需使用ArrayList.contains(desiredElement)即可。例如,如果您要从示例中查找conta1帐户,则可以使用以下方法: 编辑: 请注意,为了使其正常工作,您将需要适当地重写equals()和hashCode()方法。如果使用的是Eclipse IDE,则可以通过首先打开对象的源文件并选择来生成这些方法。

  • 问题内容: 有什么方法可以检查一个集合是否包含一个或多个具有比使用contains循环两次更好的性能的值? 在其他意义上看起来像这样 问题答案: 循环的实现遍历每个元素并进行测试,因此调用两次 效率低下 。 您可以编写自己的循环,使用已编译的regex 模式同时检查两者,同时查找两个名称:

  • 我的两个列表中有以下元素,清单1[A F K]和清单2[B A C F K]。清单1的所有元素都在清单2中,因此它应该返回true 我尝试使用list1.containsAll(list2),但它并不支持我。 我尝试在这两个列表中循环,如果找到匹配,我就清空第一个列表中的那个位置,但这不起作用,因为我认为它会受到并发修改的影响。这是我的代码 在这里,subTreeList最终输出[A]。我知道它会

  • 如何检查ArrayList中的值是否包含一组特定的字母? 比如如何检查值是否包含字符串“Axe”?