【问题标题】:Find If HashMap contains a value or not and delete that value only查找 HashMap 是否包含值并仅删除该值
【发布时间】:2015-01-26 03:34:10
【问题描述】:

假设我们有以下代码:

public class HashMapTest {
    public static void main(String[] args) {
        HashMap<String, ArrayList<String>> map1 = new HashMap<>();
        ArrayList<String> al = new ArrayList<>();
        al.add("A");
        al.add("B");
        al.add("C");
        map1.put("1", al);
    }
}

起初HashMap 看起来像:

{{"1"},{"A","B","C"}}

现在我想在HashMap 中找到值"B",并想从arraylist 中删除这个值,它存在于hashmap 中。

所以最终的结果应该是这样的:

{{"1"},{"A","C"}}

谁能告诉我怎么做?

【问题讨论】:

  • 这是一个小问题,你试过什么?
  • 然而 HashMap 对这个要求并不是特别有价值
  • 代码足够简单,尽管您需要在循环中进行循环这一事实应该暗示您可能有错误的数据结构。

标签: java arraylist iterator hashmap


【解决方案1】:

在 HasMap 中使用 HashSet 而不是 ArrayList。

HashMap<String, HashSet<String>> map1 = new HashMap<>();
HashSet<String> al = new HashSet<>();
al.add("A");
al.add("B");
al.add("C");
map1.put("1", al);

删除者:

map1.get("1").remove("B") 

【讨论】:

  • 您能否修改代码并告诉我它将如何帮助我们?
  • 假设我们不知道键并且值存在于多个键中......我们希望删除包含该值的所有键的该值。
  • 如果我们需要在集合中多次存储“值”,使用 hashset 可能不是解决方案
  • 如果需要多个值,则在 hashmap 中使用 Hashmap
【解决方案2】:

目前 Java 不支持使用其在 hashmap 中的值删除元素,因此您必须迭代所有元素并获取 arraylist 并检查该值是否存在(如果存在)而不是删除该值.如果该值是静态的,您可以使用map1.get("1").remove("B"),如果它是动态的,则提供输入源然后迭代地图,然后迭代arraylist 检查值是否仍然存在,如果存在则删除它`

【讨论】:

    猜你喜欢
    • 2019-10-03
    • 2014-03-15
    • 1970-01-01
    • 2019-08-24
    • 2016-10-16
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    • 2021-10-09
    相关资源
    最近更新 更多