Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取元素的索引,该元素不是';不是第一个 假定 ArrayList list=Arrays.asList(新整数[]{1,2,3,4,5,6,1,8,9}); 第二次发生_Java_Arraylist_Indexof - Fatal编程技术网

Java 如何获取元素的索引,该元素不是';不是第一个 假定 ArrayList list=Arrays.asList(新整数[]{1,2,3,4,5,6,1,8,9}); 第二次发生

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 (

我想获取(多个)包含元素“1”的第二次查找的索引,但是
列表。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)
。我怀疑它是否能用于ASK
List
接口或其实现。您的方法很好。可以使用
子列表
结合
索引
来实现;请参见ArrayList:查找整数的第n个匹配项
list.indexOf(1, list.indexOf(1) + 1);
list.subList(list.indexOf(1) + 1, list.size()).indexOf(1)