我对 Java 的 ArrayList 有疑问。我创建了一个对象,它包含两个属性 x 和 y。现在我已经在我的 ArrayList 中加载了一些对象。问题是我不知道如何找到我正在搜索的具有 x 属性的对象的索引。有什么办法吗?
最佳答案
假设是这样的:
public class Point {
public final int x;
public final int y;
}
和声明:
List<Point> points = ...;
您可以使用 for-each 遍历所有点并找到您想要的点:
for (Point p : points) {
if (p.x == targetX) {
process(p);
break; // optional
}
}
请注意,这不会为您提供索引,但会为您提供Point
。本身,有时这就足够了。如果你真的需要索引,那么你会想要使用索引 for 循环,使用 size()
和 get(int index)
(参见 BalusC 的回答)。
另见
以上解决方案在O(N)
中搜索对于每个 targetX
.如果你经常这样做,那么你可以通过声明 class Point implements
来改进它。 Comparable<Point>
, 使用 x
作为 Collections.sort
的主要排序键.
然后你可以 Collections.binarySearch
.设置时间为 O(N log N)
, 现在可以在 O(log N)
中回答每个查询.
另一种选择是使用 SortedSet
例如 TreeSet
, 特别是如果你有一个 Set<Point>
, 不是 List<Point>
.
另见
关于java - 我对象的ArrayList,indexOf问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2769797/