2个元素具有相同的索引?

时间:2014-08-30 19:12:14

标签: java arraylist

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,但似乎每次我打印索引0

4 个答案:

答案 0 :(得分:1)

indexOf使用Object#equals()来比较对象。装箱1的结果使用Integer.valueOf(1),它会为您装箱的所有其他整数返回一个equal的整数。

此外,一些实现维护整数缓存,这意味着可以将相同的实例整数插入到列表中。

在这种情况下,该方法可正确执行。如果您不想要此行为,请使用计数器变量或不与其他对象进行比较的对象。

答案 1 :(得分:1)

indexOf返回给定元素第一次出现的索引。 由于所有元素都相等,因此始终返回第一个索引0

答案 2 :(得分:0)

列表中的所有数字都相同。这就是为什么indexOf总是返回第一个元素的索引(因为它等于所有其他元素)。

答案 3 :(得分:0)

indexOf(Object)

  

返回此列表中第一次出现的指定元素的索引

1的索引0处有ArrayList,因此返回。