【问题标题】:Why does Arrays.asList(listOfPoints).contains(point) work?为什么 Arrays.asList(listOfPoints).contains(point) 有效?
【发布时间】:2025-12-07 07:50:01
【问题描述】:

我在一个示例中遇到了以下代码,但不明白它为什么会起作用。

首先用随机值定义一个点数组:

Point[] randPoints = new Point[5];
        
        for (int i=0; i<randPoints.length; i++)
            randPoints[i] = new Point( (int)(Math.random() * 40), 
                                       (int) (Math.random()* 10) );

然后有一个循环检查这些点是否有当前的 x,y 位置:

for ( int y = 0; y < 10; y++ )
        {
          for ( int x = 0; x < 40; x++ )
          {
            if ( Arrays.asList( randPoints ).contains( new Point(x,y) ) )
              System.out.print( "P" );
            else
              System.out.print( "." );
          }
          System.out.println();
        }

Arrays.asList(randPoints) 为 contains() 中的比较返回什么?为什么可以进行这种比较?

感谢您的支持。

【问题讨论】:

  • 提示:所有标准的java库类都有优秀的javadoc。先读那个。说真的,为什么认为其他人应该再次为你写下已经很好解释的内容?!
  • 那个 javadoc 会告诉你 asList 返回一个 List 对象。 List 接口的 javadoc 会告诉您 contains 方法应该如何工作。再次严肃地说,这就是学习编程的本质:挖掘事物以发现自己。询问他人是一种有效的方法,但请将其作为最后一个选项,而不是第一个选项。

标签: java list compare


【解决方案1】:

这里发生的只是数组被包装在 List 容器中,并且正在调用 contains(这是一个 List 方法)。要查看包含的内容,只需阅读documentation

如果此列表包含指定元素,则返回 true。更正式地说,当且仅当此列表包含至少一个元素 e 满足 (o==null ? e==null : o.equals(e)) 时,才返回 true。

您可以轻松地做到这一点,而无需包装数组。

【讨论】:

  • 谢谢大家的cmets和回答。我现在明白这是怎么做到的了。我没有得到的是 Arrays.asList(randPoints) 返回一个“点”列表。并且每个“点”都由 (x,y) 组合简单地定义。理解这一点后,很容易明白为什么可以在 ...contains(new Point(x,y)) 部分进行比较。
最近更新 更多