Different outputs while printing ArrayList in java

Swapnil :

Review last 2 lines of both outputs why different? I am satisfied with program 1

Program 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**

I am unsatisfied with program 2 output Why different output while printing arraylist? why "java.util.ArrayList" is last line of output for prog 2 but "java.lang.Integer" for prog1

Program 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
Michael Berry :

Instead of al.add(2, al);, you almost certainly want al.addAll(2, al);, which will add the contents of al (as it stands before that method call is complete) to al.

At present, you're just adding an ArrayList object to the list, and since your ArrayList can contain any old thing due to lack of generic parameters (not desirable!), this compiles and runs just fine.

You're running into this issue because you're using a generic ArrayList without any generic parameters. If you were explicitly using ArrayList<Integer>, then that line as it stands wouldn't compile. Using it without such parameters is only supported for legacy, backwards compatibility reasons, and should be avoided.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=74404&siteId=1