Open In App

How to Pass ArrayList Object as Function Argument in java?

Improve
Improve
Like Article
Like
Save
Share
Report

ArrayList class in Java is basically a resizable array i.e. it can grow and shrink in size dynamically according to the values that we add or remove to/from it. It is present in java.util package. If we want to pass an ArrayList as an argument to a function then we can easily do it using the syntax mentioned below.

Example:

ArrayList<Integer> list = new ArrayList<>();
modifyList(list);
public static void modifyList(ArrayList<Integer> list){
       list.add(69);
       list.add(98);
}

In the code above, we created an ArrayList object named ‘list’ and then we passed it to a function named modifyList. The changes that we did to this list (i.e. the values that we added to the list) will appear to the original list inside the main function. This is happening because the Object References are passed by value in java as java is strictly Pass by Value

Implementation of the problem statement:

Java




// Java program to pass an
// ArrayList as an argument
 
import java.util.*;
 
public class GFG {
 
    public static void main(String[] args)
    {
        // Creating an ArrayList Object of Integer type
        ArrayList<Integer> list = new ArrayList<>();
 
        // Inserting some Integer values in ArrayList
        list.add(3);
        list.add(57);
        list.add(7);
 
        // list after insertions : [3, 57, 7]
        // Displaying the ArrayList
        System.out.print("ArrayList after insertions: ");
        display(list);
 
        // Passing the ArrayList as an argument for
        // modification The modifications done to the list
        // inside the function will appear inside the
        // original ArrayList inside main()
        modifyList(list);
 
        // list after modifications : [3, 57, 7, 20, 98]
        // displaying the ArrayList after modifications
        System.out.print("ArrayList after modifications: ");
        display(list);
    }
 
    // Function to modify the arrayList
    public static void
    modifyList(ArrayList<Integer> parameterList)
    {
        parameterList.add(20);
        parameterList.add(98);
    }
 
    // Function to display the array List
    public static void display(ArrayList<Integer> list)
    {
        System.out.println(list);
    }
}


Output

ArrayList after insertions: [3, 57, 7]
ArrayList after modifications: [3, 57, 7, 20, 98]

 

How Java is pass by Value?

Let us assume that the Array list object that we created inside the main function points to an address 1000. When we passed this object to the modifyList function then the address 1000 is passed to it and the object ‘parameterList’ also starts pointing to the same location inside the memory as that of ‘list’ that is why we said that object references are passed by value in java. After that when we did modifications to ‘parameterList’ then the same changes are made to the original ‘list’. This concept is very similar to what happens in C++ when we pass a pointer variable as an argument.

ArrayList<Integer> list = new ArrayList<>();
callByValue(list);
public static void callByValue(ArrayList<Integer> parameterList){
       parameterList = new ArrayList<>();
       parameterList.add(88);
       parameterList.add(200);
       parameterList.add(89);
}

In the code above when we passed the list to the callByValue function then the ‘parameterList’ starts pointing to the memory address i.e. 1000. But when we created a new instance of ArrayList and made ‘parameterList’ point to it then ‘parameterList’ starts pointing to a new memory address (let’s say) 2000. The changes made to ArrayList inside this function will no longer affect the ArrayList at memory address 1000. Hence, the ‘list’ inside the main function remains unaffected.

Below is the implementation of the problem statement: 

Java




// Java program to pass an
// ArrayList as an argument
 
import java.util.ArrayList;
 
public class GFG {
 
    public static void main(String[] args)
    {
 
        // Creating an ArrayList Object of Integer type
        ArrayList<Integer> list = new ArrayList<>();
        // Inserting some Integer values in ArrayList
        list.add(3);
        list.add(57);
        list.add(7);
 
        // list after insertions : [3, 57, 7]
 
        // Displaying the ArrayList
        System.out.print("ArrayList after insertions: ");
        display(list);
 
        // The changes made to the ArrayList inside this
        // function will not affect the original ArrayList
        // that we pass to it as we are simply creating the
        // new instance of ArrayList and making our
        // parameterList point to it
        callByValue(list);
 
        // list after function call : [3, 57, 7]
 
        // displaying the ArrayList after calling
        // callByValue
        System.out.print(
            "ArrayList after the function call: ");
        display(list);
    }
 
    public static void
    callByValue(ArrayList<Integer> parameterList)
    {
 
        // Creating a new instance of ArrayList
        parameterList = new ArrayList<>();
 
        // Inserting Integer values to the new ArrayList
        // created inside the function
        parameterList.add(88);
        parameterList.add(200);
        parameterList.add(89);
 
        // Displaying our new ArrayList
        System.out.print(
            "New ArrayList inside the function: ");
        display(parameterList);
    }
 
    // Function to display the array List
    public static void display(ArrayList<Integer> list)
    {
        System.out.println(list);
    }
}


Output

ArrayList after insertions: [3, 57, 7]
New ArrayList inside the function: [88, 200, 89]
ArrayList after the function call: [3, 57, 7]


Last Updated : 29 Oct, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads