Java 如何获取元素的索引,该元素不是';不是第一个 假定 ArrayList list=Arrays.asList(新整数[]{1,2,3,4,5,6,1,8,9}); 第二次发生
我想获取(多个)包含元素“1”的第二次查找的索引,但是Java 如何获取元素的索引,该元素不是';不是第一个 假定 ArrayList list=Arrays.asList(新整数[]{1,2,3,4,5,6,1,8,9}); 第二次发生,java,arraylist,indexof,Java,Arraylist,Indexof,我想获取(多个)包含元素“1”的第二次查找的索引,但是列表。indexOf(1)将始终返回0(因为它是第一次查找) 演出 我希望这样做时不使用类似for或while之类的循环。 因为我在游戏中需要它,所以使用循环根本没有效率 编辑:是否有任何方法可以在不使用迭代器的情况下获取某个元素的“indexOf”?如果不使用迭代器,则无法执行此操作。 例如,indexOf迭代 public int indexOf(Object o) { if (o == null) { for (
列表。indexOf(1)
将始终返回0
(因为它是第一次查找)
演出
我希望这样做时不使用类似for
或while
之类的循环。
因为我在游戏中需要它,所以使用循环根本没有效率
编辑:是否有任何方法可以在不使用迭代器的情况下获取某个元素的“indexOf”?如果不使用迭代器,则无法执行此操作。
例如,
indexOf
迭代
public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
public int indexOf(对象o){
如果(o==null){
对于(int i=0;i
同样适用于lastIndexOf
如您所见,如果您担心的是迭代器,那么根本不使用迭代器 顺便说一句,这不是性能问题
您有包含数百万个元素的数组吗?如果有,请考虑更改数据结构类型。
list.indexOf(1, list.indexOf(1) + 1);
第一个参数1
是要搜索的对象。
第二个参数
list.indexOf(1)+1
是搜索的起始索引。如果您非常关心性能,请使用HashMap
。然后,如果您希望元素m
,您可以执行map.get(m).get(n)
。地图包含元素及其对应的索引
构建地图后,查询的时间复杂度将为O(1)
例如:
publicstaticvoidmain(字符串[]args){
int[]a={1,2,1,3,4,1};
Map Map=newhashmap();
for(int i=0;i
结果:
二,
indexOf
也会在列表中迭代。我想我现在需要更改我的问题使用subList
,然后使用indexOf
(但效率不高,但在我看来是可读的)。您可以使用lastIndexOfYeah,但假设数组是[1,2,3,1,4,1]我想得到中间的一个,用于String
s而不是List
s,至少在Java中是这样11@CarlosHeuberger你说得对。尽管OP还是改变了他们的问题。你可以给出你的答案,并将链接发布到你提到的方法的文档indexOf(objectwhat,int where)
。我怀疑它是否能用于ASKList
接口或其实现。您的方法很好。可以使用子列表
结合索引
来实现;请参见ArrayList:查找整数的第n个匹配项
list.indexOf(1, list.indexOf(1) + 1);
list.subList(list.indexOf(1) + 1, list.size()).indexOf(1)