2014-08-30 5 views
-2
import java.util.ArrayList; 
public class TSTER { 

    public static void main(String[] args) { 
     ArrayList<Integer> test = new ArrayList<Integer>(7); 
     test.add(1); 
     test.add(1); 
     test.add(1); 
     test.add(1); 
     test.add(1); 
     test.add(1); 
     test.add(1); 
     for(int d:test) 
     { 
      System.out.println(d); 
      int x = test.indexOf(d); 
      System.out.println(x); 
     } 
     System.out.println(test.size()); 
    }  


} 

Выход 10 и так далее. Размер i 7, но кажется, что каждый раз, когда я печатаю индекс, его 02 элемента имеют одинаковый индекс?

ответ

0

Все нульмеры в списке равны. Поэтому indexOf всегда возвращает индекс первого элемента (поскольку он равен всем остальным элементам).

0

indexOf(Object)

Возвращает индекс первого вхождения указанного элемента в этом списке,

Там в 1 индекс 0 вашего ArrayList, так что это возвращается.

1

indexOf использует Object#equals() для сравнения объектов. Результат бокса 1 использует Integer.valueOf(1), который возвращает целое число equal ко всем другим целым числам, которые вы ввели в бокс.

Кроме того, некоторые реализации поддерживают целочисленный кеш, что означает, что в список может быть вставлен один и тот же экземпляр Integer.

Метод корректно работает в этом случае. Если вы не хотите этого поведения, используйте переменную счетчика или объект, который не сравнивается с другими объектами.

1

indexOf возвращает индекс первого вхождения данного элемента. Поскольку все ваши элементы равны, всегда возвращается первый индекс, 0.

Смежные вопросы