如何在arrayList中找到第n个索引

时间:2016-12-21 11:46:47

标签: java list arraylist collections

如何在arraylist中找到第n个索引 例如:我有List<Character> charList = new ArrayList<Character>(Arrays.asList('s', 'h','a','r','a','n'))

charList.indexOf('a'); 

始终提供a第一个索引。 我怎么得到第n个?

6 个答案:

答案 0 :(得分:1)

ArrayList中的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 indexNth(List charList, int n, Object _enum) {
        int index = 0;
        int findTimes = 0;
        if (n == 0)
            return -1;
        if (CollectionUtils.isEmpty(charList))
            return -1;
        for (Object o : charList) {
            if (o.equals(_enum))
                findTimes++;
            if (findTimes >= n)
                return index;
            index++;
        }
        return -1;
    }

答案 1 :(得分:1)

这是基于Java 8 Streams的方法:

    List<Character> charList = new ArrayList<>(Arrays.asList('s', 'h','a','r','a','n'));

    int[] allIndexes = IntStream.range(0, charList.size())
                                .filter(i -> charList.get(i).equals('a'))
                                .toArray();

    System.out.println(Arrays.toString(allIndexes));

这将在输入数组charList中搜索与所需元素'a'相等的所有元素,并返回包含匹配元素索引的数组。如果N小于allIndexes[N],则第N次出现在allIndexes.length,否则不会出现第N次。 (这假设N是从零开始的,就像数组和List索引是Java一样。)

在这种情况下,结果是

    [2, 4]

答案 2 :(得分:0)

indexOf('a')会返回第一个&#39; a&#39;的索引。列表中的元素。

为了找到第n个&#39; a&#39;的索引,您需要遍历列表:

int count = 0;
int index = -1;
for (int i = 0; i < charList.size(); i++) {
    if charList[i].equals('a') {
        count++;
    }
    if (count == 2) {
        index = i;
        break;
    }
}

我认为你正在寻找第二个&#39; a&#39;。

答案 3 :(得分:0)

我会为它创建一个方法,如下所示:

public static <T> int indexOfNth(List<T> list, T find, int nthOccurrence) {
    if (list == null || list.isEmpty()) return -1;
    int hitCount = 0;
    for (int index = 0; index < list.size(); index++) {
        if (list.get(index).equals(find)) {
            hitCount++;
        }
        if (hitCount == nthOccurrence) return index;
    }
    return -1;
}

答案 4 :(得分:0)

以下代码段将从arraylist返回所需字符的位置。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;


class Test4
{

    public static int find(ArrayList<Character> obj,int index,char value)
    {

        int counter=0;
        for(int i=0;i<obj.size();i++)
        {

            if(obj.get(i)==value)
            {
                counter++;
                if(counter==index)
                {
                    return i+1;
                }
            }
        }
            return -1;

    }

     public static void main(String[] args) {

       ArrayList<Character> charList = new ArrayList<Character>(Arrays.asList('s', 'h','a','r','a','n'));


  // The following parameters to method find are as find the position of second character 'a' in the ArrayList

       System.out.println(find(charList,2,'a'));

    }

}

如果角色不存在,则返回-1。

答案 5 :(得分:0)

public static int indexOf(List<Object> tokens, int n, Object obj) {
        int times = 0;
        for (int i = 0; i < tokens.size(); i++) {
            if (tokens.get(i) == obj && n == ++times) {
                return ++i;
            }
        }
        return -1;
    }