你需要进行暴力搜索:
static <T> List<Integer> indexesOf(List<T> source, T target)
{
final List<Integer> indexes = new ArrayList<Integer>();
for (int i = 0; i < source.size(); i++) {
if (source.get(i).equals(target)) { indexes.add(i); }
}
return indexes;
}
Run Code Online (Sandbox Code Playgroud)
请注意,这不一定是最有效的方法.根据上下文和列表的类型/大小,您可能需要进行一些严格的优化.关键是,如果您需要每个索引(并且对列表内容的结构一无所知),那么您需要在每个项目中进行死亡,以获得最佳O(n)成本.
根据底层列表的类型,get(i)可能是O(1)(ArrayList)或O(n)(LinkedList),因此这可能会导致O(n 2)实现.您可以复制到ArrayList,或者您可以LinkedList手动递增索引计数器.