代码之家  ›  专栏  ›  技术社区  ›  Igor

如何在ArrayList中基于所包含元素的属性返回索引

  •  1
  • Igor  · 技术社区  · 15 年前

    在我的特殊情况下

    自从 ArrayList中的第一个工作对象不一定以0开头 (并且可能有间隙),它与每个元素在这个ArrayList中的索引的ID不同。

    现在 我想根据它的属性“worker\u id”来确定ArrayList中worker对象的这个特定索引 . 但是:由于列表可能很长,我不想每次都迭代worker ArrayList。

    使用HashMap可能是一种解决方案,但是如果可能的话,我希望使用ArrayList,因为我通常不需要密钥(除了在这种情况下)。

    欢迎任何建议!

    先谢谢你, 伊戈尔。

    7 回复  |  直到 15 年前
        1
  •  3
  •   aioobe    15 年前

    在我看来 列表至少已排序 ? 那样的话,你可以用 ,这比列表的线性扫描要快一些。

    另一种选择是将两个工人定义为 equal worker_id . 那么你可以简单地 int index = workerList.indexOf(new Worker(idToSearchFor));

    老实说,当我用地图的时候 很少因为我 不能 去做吧 地图的界面更便于使用

        2
  •  1
  •   Péter Török    15 年前

    你可以考虑使用 LinkedHashMap . 这提供了两个世界中最好的:由于其可预测的迭代顺序,它可以表现为一个列表

    价格是,可以预期的,一个轻微的性能损失(相比 ArrayList

        3
  •  0
  •   Dheeraj Joshi    15 年前

    遍历所有对象并检查id。

        4
  •  0
  •   Vivien Barousse    15 年前

    比如:

    List<Worker> workers = // ...
    for (int i = 0; i < workers.size(); i++) {
        if (/* ... */) {
            return i;
        }
    }
    
        5
  •  0
  •   Gadolin    15 年前

    int find(List <A> list, Object sth) { Iterator it = list.iterator(); int index = 0; while(it.hasNext()); A current = it.next(); if (el.getSth().equals(element)) { return index; } index++; } return -1; }

        6
  •  0
  •   Dhana Krishnasamy    15 年前

    创建与最大worker\u id值一样大的列表。在插入对象时,将其插入到worker\u id number处。 喜欢

    列表.添加(对象工人id,对象);
    检索时
    列表.获取(对象工人id);

    是的,这不是节省空间的解决方案,节省空间的解决方案是使用Hashmap(或其变体),正如其他人已经提到的那样。

        7
  •  0
  •   Bill Michell    15 年前

    我想你有两个选择: