首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在HashSet中使用contains方法比较java中的地图

在HashSet中使用contains方法比较java中的地图
EN

Stack Overflow用户
提问于 2018-09-23 03:57:41
回答 1查看 205关注 0票数 0

我正在为n-puzzle实现几个解算器(BFS和A*)。我使用HashSet来维护封闭列表,因为contains方法有O(1)时间。

我的HashSet是一组HashMaps (从整数到整数),所以我想看看HashSet是否包含指定的映射。如果HashSet的名称是set,而HashMap的名称是map,那么是否可以这样写:

代码语言:javascript
复制
set.contains(map);

检查map的键和值是否都与集合中映射的键和值匹配?

如果不是,那么根据映射列表检查map的值的最快方法是什么?

我也试过创建一个地图列表,然后使用地图的equals方法来比较列表中的每个地图,但随着封闭列表的大小增加,它似乎太慢了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-23 04:32:04

是的,您可以使用contains()查看给定的Map对象是否在您拥有的Set中。contains()方法将使用equals()方法比较对象,HashMapequals()方法为defined as follow

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

请参考以下示例源代码:

代码语言:javascript
复制
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));
    }
}

这将生成以下输出:

代码语言:javascript
复制
[{1=4, 2=3}, {1=4, 6=7}]
{} | false
{6=7} | false
{1=4, 6=7} | true

您可以看到,在最后,contains()方法将返回true,因为它与Set中现有的Map对象相匹配。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52460375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档