【问题标题】:How to get index of List Object [duplicate]如何获取列表对象的索引[重复]
【发布时间】:2020-01-07 23:03:06
【问题描述】:

这里是代码有什么方法可以通过调用列表中的方法从列表中获取对象的索引。

例如这样的:

class A{
    String a="";
    String b="";
}

List<A> alist= new ArrayList();

for (A a : alist) {
    a.getIndexInList();
}

【问题讨论】:

  • 不,没有办法调用对象的方法并获取索引。您可以改为遍历索引,这可能是最好的方法。
  • 是的,您可以在 A 类中执行 hashCodeequals 方法。然后使用List&lt;A&gt; alist= new ArrayList(); for (A a : alist) { alist.indexOf(a);// This will give you the index of element }

标签: java list for-loop arraylist counter


【解决方案1】:

没有内置解决方案,您可以使用外部计数器:

List<A> alist= new ArrayList();
int counter = 0;
for (A a : alist) {
    // logic
    counter++;
}

您还可以创建一个以索引为键的地图,例如:

IntStream.range(0, alist.size()).mapToObj(Integer::valueOf)
    .collect(Collectors.toMap(
            Function.identity(),
            alist::get
    ));

alist 需要有效地最终确定。

【讨论】:

    【解决方案2】:

    为什么不使用 indexOf?如果我没记错的话,它是列表的内置函数。

     List<A> alist= new ArrayList<>();
     for (A a : alist) {
         int index = alist.indexOf(a);
     }
    

    只有列表才能为您提供索引。除非数组中的对象知道它在数组中,否则它不能给你它的索引。

    【讨论】:

    • 比使用自己的计数器要慢。我们知道顺序,indexOf 每次都会执行查找。
    • 另外你没有提到equalshashCode。有一些原因,当 hashCode 返回常量值时 - 这将不起作用。
    • @Richard Baker 如果有重复元素怎么办? indexOf() 返回第一次出现。
    • 所有这些都是OP没有提到的实现细节。是的,它比创建自己的循环要慢,是的,如果 hashcode 和 equals 不正确,结果也是如此,是的,重复项将返回第一个 - 对于列表中的几乎所有其他函数,所有这些都是正确的。
    猜你喜欢
    • 1970-01-01
    • 2012-11-25
    • 2020-11-23
    • 2015-03-31
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    相关资源
    最近更新 更多