Индекс дубликатов элементов ArrayList дает одинаковое значение индекса - PullRequest
0 голосов
/ 31 марта 2020

Я попытался найти индекс дубликатов элементов 2 в ArrayList - [1, 2, 3, 4, 2, 5, 6, 2, 7, 2].

Какой вывод должен быть [1,4,7,9]. Но я получаю как [1,1,1,1]. Пожалуйста, кто-нибудь, помогите мне получить правильный вывод.

package com.practice.first;

import java.util.ArrayList;
import java.util.List;

public class SampleList {

    public static void main(String[] args) {

        List<Integer> al = new ArrayList<Integer>();
        al.add(1);
        al.add(2);
        al.add(3);
        al.add(4);
        al.add(2);
        al.add(5);
        al.add(6);
        al.add(2);
        al.add(7);
        al.add(2);

        for (int i = 0; i < al.size(); i++) {
            if (al.get(i).equals(2)) {
                System.out.println("Element 2 is present at " + al.indexOf(al.get(i)));         
            }
        }

    }
}

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Ваша проблема в al.indexOf(al.get(i)). Из официальной документации :

  • get(int index) Возвращает элемент в указанной позиции в этом списке.
  • indexOf(Object o) Возвращает индекс первого вхождения указанного элемента в этом списке или -1, если этот список не содержит элемента.

Возможно, вы просто хотите:

System.out.println("Element 2 is present at " + i);
0 голосов
/ 31 марта 2020

Из javado c indexOf :

Возвращает индекс первого вхождения указанного элемента в этом списке или -1, если этот список не содержать элемент. Более формально, возвращает самый низкий индекс i, такой что (o == null? Get (i) == null: o.equals (get (i))), или -1, если такого индекса нет.

Таким образом, indexOf всегда будет возвращать первый вхождение элемента, даже если он присутствует в списке несколько раз. Чтобы получить правильный индекс, вам просто нужно напечатать вашу переменную l oop i следующим образом:

for (int i = 0; i < al.size(); i++) {
    if (al.get(i).equals(2)) {
        System.out.println("Element 2 is present at " + i);         
    }
}
...