为了账号安全,请及时绑定邮箱和手机立即绑定

使用HashSet中的contains方法比较java中的Map

使用HashSet中的contains方法比较java中的Map

胡子哥哥 2021-10-06 09:37:13
我正在为 n-puzzle 实现几个求解器(BFS 和 A*)。我正在使用 HashSet 来维护封闭列表,因为 contains 方法的时间为 O(1)。我的HashSet是一组HashMap(整数转整数),所以想看看HashSet是否包含指定的map。如果 HashSet 的名称是set,而 HashMap 的名称是map,是否足够写:set.contains(map);检查键和值是否map与集合中的任何映射的键和值匹配?如果没有,map根据地图列表检查值的最快方法是什么?我还尝试创建一个地图列表,然后使用地图的 equals 方法来比较列表中的每个地图,但随着封闭列表的大小增加,它似乎太慢了。
查看完整描述

1 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

是的,您可以使用它contains()来查看像给定Map对象这样的对象是否在Set您拥有的内部。该contains()方法将使用equals()方法进行比较的对象,和equals()的方法HashMap被定义如下:


比较指定对象与此映射是否相等。返回true如果给定对象也是一个映射并且两个映射表示相同的映射。更正式地说,两个映射m1和m2表示相同的映射,如果m1.entrySet().equals(m2.entrySet())。这确保了 equals 方法可以在Map接口的不同实现中正常工作。


请参阅以下示例源代码:


import java.util.Map;

import java.util.Set;

import java.util.HashMap;

import java.util.HashSet;


public class Test {

    public static void main(String[] args) {


        Set<Map<Integer, Integer>> sets = new HashSet<Map<Integer, Integer>>();

        Map<Integer, Integer> m1 = new HashMap<Integer, Integer>();

        m1.put(1, 4);

        m1.put(2, 3);

        sets.add(m1);

        Map<Integer, Integer> m2 = new HashMap<Integer, Integer>();

        m2.put(1, 4);

        m2.put(6, 7);

        sets.add(m2);

        System.out.println(sets);


        Map<Integer, Integer> m3 = new HashMap<Integer, Integer>();

        System.out.println(m3+" | "+sets.contains(m3));

        m3.put(6, 7);

        System.out.println(m3+" | "+sets.contains(m3));

        m3.put(1, 4);

        System.out.println(m3+" | "+sets.contains(m3));

    }

}

这将生成以下输出:


[{1=4, 2=3}, {1=4, 6=7}]

{} | false

{6=7} | false

{1=4, 6=7} | true

您会在最后看到该contains()方法将返回,true因为它与Map您的Set.


查看完整回答
反对 回复 2021-10-06
  • 1 回答
  • 0 关注
  • 170 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信