indexOf()在Java数组中具有重复值

时间:2017-06-02 15:47:34

标签: java arrays indexof

我试图在此数组中打印每个值索引的值。

    Integer[] i = { 0, 2, 3, 4, 4 };
    for (int each : i) {
      System.out.print(Arrays.asList(i).indexOf(each) + " ");
    }

现在,我希望它说0, 1, 2, 3, 4,而不是0, 1, 2, 3, 3

我需要更改以获取每个特定索引,而不是每个值的“第一个匹配”?

3 个答案:

答案 0 :(得分:1)

不确定您要使用代码完成什么,但是如果要打印数组的所有索引而不是值,则可以执行此操作

Integer[] i = {0,2,3,4,4};
for (int index = 0; index < i.length; index++) 
{
    System.out.print(index + " ");
}

答案 1 :(得分:0)

如果列表中有重复的值 - 您将在实现中返回第一个匹配值。要解决此问题 - 您可以创建一个复制数组,当复制中找到值时 - 将其替换为“null”。

下次重复的值将找不到第一个重复,并将返回下一个索引。

Integer[] i = {0,2,3,4,4};
Integer[] copy = new Integer[i.length];
System.arraycopy( i, 0, copy, 0, i.length );

        for (int each : i) {
            int index = Arrays.asList(copy).indexOf(each);
            System.out.print(index + " ");
            copy[index] = null;
        }
  

输出:0 1 2 3 4

现在你可以重新排序初始数组,它仍然会返回正确的索引。

答案 2 :(得分:0)

如果您想在数组中获取特定项目Index,您可以执行以下操作:

public static void main(String[] args){

    // Create example Arrays
    Integer[] arrayOfIntegers = {1,2,3,4,5};
    String[] arrayOfStrings = {"A", "B", "C", "D",};

    /******Test*******/
    // what is the index of Integer 2 in the arrayOfIntegers
    System.out.println(getIndex(arrayOfIntegers, 2));

    // what is the index of String "C" in the arrayOfStrings
    System.out.println(getIndex(arrayOfStrings, "C"));

    // what is the index of String "X" in the arrayOfIStrings
    // which doesn't exist (expected value is -1)
    System.out.println(getIndex(arrayOfStrings, "X"));  
}

/**
 * This method to return the index of a given Object in
 * the array. It returns - 1 if doesn't exist
 * @param array
 * @param obj
 */
public static int getIndex(Object[] array, Object obj){
    for(int i=0; i<array.length; i++){
        if(obj.equals(array[i])){
            return i;
        }
    }
    return -1;
}

<强>输出

 1
 2
-1

此外,如果您要为数组中的 重复 项目返回 所有 指数,可以做这样的事情:

/**
* This method returns all indices of a given Object 
* in an ArrayList (which will be empty if did not found any)
* @param array
* @param obj
*/
public static ArrayList<Integer> getIndices(Object[] array, Object obj){
    ArrayList<Integer> indices = new ArrayList<Integer>();
    for(int i=0; i<array.length; i++){
        if(obj.equals(array[i])){
            indices.add(i);
        }
    }
    return indices;
}

<强>测试

// Create example Array with duplicates
String[] arrayHasDuplicates = {"A", "B", "C", "D", "B", "Y", "B"};
System.out.println(getIndices(arrayHasDuplicates, "B"));

Output:
[1, 4, 6]