在java中打印ArrayList时输出不同

Swa*_*nil 4 java collections

回顾两个输出的最后两行为什么不同?我对计划1感到满意

计划1

public static void main(String[] args) 
{
    ArrayList al = new ArrayList();
    al.add(10);
    al.add(20);
    al.add(30);
    System.out.println(al);
    System.out.println("-----------------------------------");

    al.addAll(2, al);                                                       
    System.out.println("-----------------------------------");
    System.out.println(al);

    System.out.println(al.get(2).getClass());
}

Output :

[10, 20, 30]
-----------------------------------
-----------------------------------
**[10, 20, 10, 20, 30, 30]
class java.lang.Integer**
Run Code Online (Sandbox Code Playgroud)

我对程序2输出不满意为什么在打印arraylist时输出不同?为什么"java.util.ArrayList"是prog 2的最后一行输出,但是prog1的"java.lang.Integer"

计划2

public static void main(String[] args) 
    {
        ArrayList al = new ArrayList();
        al.add(10);
        al.add(20);
        al.add(30);
        System.out.println(al);
        System.out.println("-----------------------------------");

        al.add(2,al);                                                   
        al.add(8);                                                         
        al.add(2);                                                      
        al.add(4);                                                      
        al.add(1);                                                      
        System.out.println("-----------------------------------");
        System.out.println(al);
        System.out.println(al.get(2).getClass());
    }

Output : 

[10, 20, 30]
-----------------------------------
-----------------------------------
[10, 20, (this Collection), 30, 8, 2, 4, 1]
class java.util.ArrayList
Run Code Online (Sandbox Code Playgroud)

Mic*_*rry 5

相反的al.add(2, al);,你几乎肯定希望al.addAll(2, al);,这将增加该内容al(因为它代表在此之前,方法调用完成)来al.

目前,你只是ArrayList在列表中添加一个对象,并且ArrayList由于缺少通用参数(不可取!),因为你可以包含任何旧东西,所以编译并运行得很好.

您遇到了这个问题,因为您使用的是ArrayList没有任何通用参数的泛型.如果你明确使用ArrayList<Integer>,那么那条线就不会编译.只有传统的向后兼容性原因才支持在没有这些参数的情况下使用它,应该避免使用它.