如何获取不是第一个的indexOf元素
How to get indexOf element which isn't the first
假设
ArrayList<Integer> list = Arrays.asList(new Integer[] {1,2,3,4,5,6,1,8,9});
查找第二次出现
我想获得索引 second发现(多个)包含的元素“1”但是list.indexOf(1)
将始终 return 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;
}
同样适用于 lastIndexOf
。
如您所见,根本没有使用 Iterator<Integer>
,如果您担心的话。
而且,顺便说一句,这不是性能问题。
你有包含数百万个元素的数组吗?如果有,请考虑更改数据结构类型。
list.indexOf(1, list.indexOf(1) + 1);
第一个参数1
是要搜索的对象。
second 参数 list.indexOf(1) + 1
是搜索的起始索引。
如果您非常在意性能,请使用 HashMap<Integer, List<Integer>>
。那么如果你想要第 n 次出现的元素 m
,你可以 map.get(m).get(n)
。您的地图包含元素及其对应的索引。
构建地图后,查询的时间复杂度将为 O(1)
示例:
public static void main(String[] args){
int[] a = {1, 2, 1, 3, 4, 1};
Map<Integer, List<Integer>> map = new HashMap<Integer, List<Integer>>();
for(int i = 0; i < a.length; i++){
if(map.containsKey(a[i])){
map.get(a[i]).add(i);
}else{
map.put(a[i], new ArrayList<Integer>());
map.get(a[i]).add(i);
}
}
// second index of 1. Note that index starts from 0.
System.out.println(map.get(1).get(1));
}
结果:
2
list.subList(list.indexOf(1) + 1, list.size()).indexOf(1)
假设
ArrayList<Integer> list = Arrays.asList(new Integer[] {1,2,3,4,5,6,1,8,9});
查找第二次出现
我想获得索引 second发现(多个)包含的元素“1”但是list.indexOf(1)
将始终 return 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;
}
同样适用于 lastIndexOf
。
如您所见,根本没有使用 Iterator<Integer>
,如果您担心的话。
而且,顺便说一句,这不是性能问题。
你有包含数百万个元素的数组吗?如果有,请考虑更改数据结构类型。
list.indexOf(1, list.indexOf(1) + 1);
第一个参数1
是要搜索的对象。
second 参数 list.indexOf(1) + 1
是搜索的起始索引。
如果您非常在意性能,请使用 HashMap<Integer, List<Integer>>
。那么如果你想要第 n 次出现的元素 m
,你可以 map.get(m).get(n)
。您的地图包含元素及其对应的索引。
构建地图后,查询的时间复杂度将为 O(1)
示例:
public static void main(String[] args){
int[] a = {1, 2, 1, 3, 4, 1};
Map<Integer, List<Integer>> map = new HashMap<Integer, List<Integer>>();
for(int i = 0; i < a.length; i++){
if(map.containsKey(a[i])){
map.get(a[i]).add(i);
}else{
map.put(a[i], new ArrayList<Integer>());
map.get(a[i]).add(i);
}
}
// second index of 1. Note that index starts from 0.
System.out.println(map.get(1).get(1));
}
结果:
2
list.subList(list.indexOf(1) + 1, list.size()).indexOf(1)