为什么具有相同值的不同对象会导致HashSet.contains返回true?

时间:2017-08-03 21:33:37

标签: java collections equals contains

下面是一些代码,可以看到迷宫中是否存在从左上角到右下角的路径。我对此代码的疑问是我们检查failedPoints.contains(p):我们怎么能得到true

在我们if(failedPoints.contains(p))之前,我们正在创建一个新的Point对象。即使新的Point对象与row中的另一个col具有相同的PointfailedPoints值,对象也会有所不同,所以不应该{ {1}}始终返回failedPoints.contains(p)

false

1 个答案:

答案 0 :(得分:2)

这取决于Point类的定义。

看看the HashSet.contains Javadocs

  

public boolean contains(Object o)

     

如果此set包含指定的元素,则返回true。更正式地,当且仅当此集合包含元素e时才返回true(o == null?e == null:o.equals(e))。

因此,如果Point类定义了equals方法,该方法检查其行和列是否与另一个点的行和列相同(并且还定义了hashCode不破坏契约的方法),如果另一个failedPoints.contains()等于被测试的Point,则[HttpGet] public IActionResult Get() { string token = Request.Headers["Authorization"]; // Validate token. } [HttpPost] public IActionResult Post(int id) { string token = Request.Headers["Authorization"]; // Validate token. } 将返回true。