How To Use Arrays.asList() In Java [With Examples]
Tags: java, automationtesting, softwaretesting
Published: 2023-08-04 09:38:17

Test automation can be quite challenging sometimes when dealing with complex [test cases](https://www.lambdatest.com/learning-hub/test-case?utm_source=devto&utm_medium=organic&utm_campaign=aug_04&utm_term=ap&utm_content=learning_hub). Although there are multiple ways available in any programming language to solve a particular problem, you need to be vigilant that your solution follows the best and the most efficient coding practices.

A fundamental yet important approach while designing an [automation testing framework](https://www.lambdatest.com/blog/automation-testing-frameworks/?utm_source=devto&utm_medium=organic&utm_campaign=aug_04&utm_term=ap&utm_content=blog) is the parameterization of data-driven test cases. A data-driven test case can be invoked multiple times with a different set of data values, which are passed as arguments to the parameters defined in the test method to achieve parameterization.

Talking about Java as the programming language for [automation testing](https://www.lambdatest.com/automation-testing?utm_source=devto&utm_medium=organic&utm_campaign=aug_04&utm_term=ap&utm_content=webpage), there are many ways available in which you can parameterize your tests with tools like [Selenium WebDriver](https://www.lambdatest.com/learning-hub/webdriver?utm_source=devto&utm_medium=organic&utm_campaign=aug_04&utm_term=ap&utm_content=learning_hub), [Appium](https://www.lambdatest.com/appium-mobile-testing?utm_source=devto&utm_medium=organic&utm_campaign=aug_04&utm_term=ap&utm_content=webpage), etc. But there is one method that can primarily be used for this purpose: *Arrays.asList()* method.

*Arrays.asList()* in Java is an important method that acts as a bridge between the *array* and *collection* interface in Java and provides many ways to implement parameterization.

In this blog on *Arrays.asList()* in Java, we will explore how the *Arrays.asList()* in Java works and provide examples to illustrate its usage. Whether you’re a beginner or a seasoned Java developer, understanding *Arrays.asList()* in Java can make your coding more efficient and productive.

So, let’s dive in!

***Deep dive to learn about test automation, its uasage, types and also gain insights on how to get started with*** [***automation testing***](https://www.lambdatest.com/learning-hub/automation-testing?utm_source=devto&utm_medium=organic&utm_campaign=aug_04&utm_term=ap&utm_content=learning_hub)***.***

### What is Arrays.asList() in Java?

The *Arrays.asList()* in Java is a part of the *java.util.Arrays* package and is used to create a list from an Array. This method returns a fixed-size list backed by the specified array, which means any changes made to the list will be reflected in the original array and vice versa.

The *Arrays.asList()* in Java can be used in multiple ways where you can pass an array, elements, and objects as arguments to the method. Let’s first understand its syntax and usage with the help of simple code examples. Post that, we’ll discuss the real-time examples related to test automation using [Selenium with Java](https://www.lambdatest.com/blog/selenium-with-java/?utm_source=devto&utm_medium=organic&utm_campaign=aug_04&utm_term=ap&utm_content=blog).

**Syntax:**

![image](https://cdn-images-1.medium.com/max/800/0*uefRvYwUhGnpy713.png)

* *public* is an access modifier.
    
* *static* is a non-access modifier.
    
* *List* is the method object return type.
    
* *asList* is the method name.
    
* *a* is a method argument.
    

### Arrays.asList() method examples

There are three ways in which you can use the *Arrays.asList()* in Java to implement parameterization by passing different argument types and then converting them into a *list*.

### Array as an argument

The *Arrays.asList()* in Java can accept an array as an argument and convert it to a list. The array passed as an argument to the method must be of Wrapper Class type (Integer, Float, etc.) instead of primitive data type (int, float, etc.).

```plaintext
import java.util.Arrays;
import java.util.List;

public class ArraysAsListWithArrayExample {

   public static void main (String args[]) {

       //Initializing a string Array

       String arr[] = {"Java", "Python", "C", "Ruby"};

       //Getting the list view of Array

       List <String> list = Arrays.asList(arr);

       //Printing the elements inside the list

       System.out.println(list);

   }

}
```

**Output:**

![image](https://cdn-images-1.medium.com/max/800/0*lAPSWAzn5jmfcA4Y.png)

In this example, a *String* type array has been passed as an argument to the *Arrays.asList()* in Java for converting the array to a list of string elements.

***Learn why Python is the top choice for automation testing. This comprehensive tutorial provides a step-by-step guide to*** [***automation testing using Python***](https://www.lambdatest.com/blog/python-automation-testing/?utm_source=devto&utm_medium=organic&utm_campaign=aug_04&utm_term=ap&utm_content=blog) ***to help you streamline your testing process.***

### Elements as an argument

Instead of passing the array, you can pass multiple comma-separated elements as arguments to the *Arrays.asList()* method.

```plaintext
import java.util.Arrays;
import java.util.List;

public class ArraysAsListWithElementsExample {

   public static void main (String args[]) {

       //Getting the list view of String elements

       List <String> list = Arrays.asList("Java", "Python", "C", "Ruby");

       //Printing the elements inside the list

       System.out.println(list);

   }

}
```

**Output:**

![image](https://cdn-images-1.medium.com/max/800/0*tJKRUf2pHICh6LiX.png)

In the example shown above, multiple *String* type elements are directly passed as arguments to the method for converting them as a list of string elements.

### Objects as an argument

There could be certain scenarios where you must create a list of objects of a self-defined class and then perform some action on that list.

The *Arrays.asList()* in Java allows you to pass class objects as arguments. It then creates a list of the objects you can use to perform specific actions.

```plaintext
public class ProgrammingLanguage{

   //Declaring the instance variables

   public String name;
   public double version;

   //Constructor to initialize the instance variables

   public ProgrammingLanguage(String name, double version) {

       this.name = name;
       this.version = version;

   }

   // Overriding toString method to return the String representation of the object

   public String toString() {

       return "(" + this.name + "," + this.version + ")";

   }

}
```

In the *ProgrammingLanguage* class shown above, we are initializing the instance variables with the help of the constructor and overriding the *toString()* method to represent the objects in string form.

```plaintext
import java.util.Arrays;
import java.util.List;

public class ArraysAsListWithObjectsExample {

   public static void main (String args[]) {

       //Getting the list view of ProgrammingLanguage class objects

       List <ProgrammingLanguage> list = Arrays.asList(

               new ProgrammingLanguage("Java", 17.0),
               new ProgrammingLanguage("Python", 3.10),
               new ProgrammingLanguage("C", 17.0),
               new ProgrammingLanguage("Ruby", 3.2)

               );

       //Printing the objects inside the list

       System.out.println(list);

   }

}
```

**Output:**

![image](https://cdn-images-1.medium.com/max/800/0*waSUujZqsuQFLsnn.png)

In the class above, we are passing the objects of the *ProgrammingLanguage* class to the *asList()* method as arguments to get a list of these objects.

### Arrays.asList() method usage in test automation

In this section of the [Selenium Java tutorial](https://www.lambdatest.com/learning-hub/selenium-java), we will discuss the real-time examples in which we can use the *Arrays.asList()* in Java to parameterize our test cases.

***In this Appium tutorial, learn about Appium and its benefits for mobile automation testing. Take a look at how Appium works and see how to perform*** [***Appium Automation testing***](https://www.lambdatest.com/appium?utm_source=devto&utm_medium=organic&utm_campaign=aug_04&utm_term=ap&utm_content=webpage) ***of your mobile applications.***

### Handling different driver instances

The basic capability of a [UI testing](https://www.lambdatest.com/learning-hub/ui-testing?utm_source=devto&utm_medium=organic&utm_campaign=aug_04&utm_term=ap&utm_content=learning_hub) framework is to execute the test cases on different browsers or platforms. This can be easily achieved using the concept of parameterization in the [TestNG](https://www.lambdatest.com/learning-hub/testng?utm_source=devto&utm_medium=organic&utm_campaign=aug_04&utm_term=ap&utm_content=learning_hub) framework.

{% youtube Y6M1bz8jtT8 %}

Feel free to choose any framework you are comfortable working with to implement the logic of [handling multiple browsers](https://www.lambdatest.com/blog/handling-browser-tabs-with-selenium/?utm_source=devto&utm_medium=organic&utm_campaign=aug_04&utm_term=ap&utm_content=blog). TestNG is one option, but if you are not familiar with it or prefer another framework, you can explore other alternatives.

The *Arrays.asList()* in Java can be used predominantly for this purpose. Assuming Selenium WebDriver as the [automation testing tool](https://www.lambdatest.com/blog/automation-testing-tools/?utm_source=devto&utm_medium=organic&utm_campaign=aug_04&utm_term=ap&utm_content=blog) in this example, we will see how we can write a logic for handling multiple driver instances for different browsers using the *Arrays.asList()* method.

```plaintext
import java.util.Arrays;
import java.util.List;
import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class DriverManager {
     
      private RemoteWebDriver driver;
     
      public static void init_driver(String browser) throws MalformedURLException {
             
              String username = System.getenv("LT_USERNAME") == null ? "Your LT Username" : System.getenv("LT_USERNAME");
              String authkey = System.getenv("LT_ACCESS_KEY") == null ? "Your LT AccessKey" : System.getenv("LT_ACCESS_KEY");

              // Create a list of browsers
              List<String> browsers = Arrays.asList("chrome", "firefox", "edge");

                 // Loop through the list of browsers and create a driver instance for each one
                 for (String browserName : browsers) {

                     if (browser.equalsIgnoreCase("chrome")) {
                           
                     //To launch the chrome browser on local      
                     /*driver = new ChromeDriver();*/
                    
                     //Setting chrome capabilities
                     DesiredCapabilities ChromeCaps = new DesiredCapabilities();
                     ChromeCaps.setCapability("platform", "Windows 10");
                     ChromeCaps.setCapability("browserName", "chrome");
                     ChromeCaps.setCapability("version", "latest");
                     ChromeCaps.setCapability("build", "TestNG With Java");
                     ChromeCaps.setCapability("name", m.getName() + this.getClass().getName());
                     ChromeCaps.setCapability("plugin", "git-testng");

                      //To launch the chrome browser on LambdaTest cloud grid
                      String[] Tags = new String[]{"Feature", "Magicleap", "Severe"};
                      ChromeCaps.setCapability("tags", Tags);

                      driver = new RemoteWebDriver(new URL("https://" + username + ":" + authkey + hub), ChromeCaps);
                
                     } else if (browser.equalsIgnoreCase("firefox")) {
                     
                     //To launch the firefox browser on local        
                     /*driver = new FirefoxDriver();*/
                    
                     //Setting firefox capabilities
                     DesiredCapabilities FirefoxCaps = new DesiredCapabilities();
                     FirefoxCaps.setCapability("platform", "Windows 10");
                     FirefoxCaps.setCapability("browserName", "firefox");
                     FirefoxCaps.setCapability("version", "114.0");
                     FirefoxCaps.setCapability("build", "TestNG With Java");
                     FirefoxCaps.setCapability("name", m.getName() + this.getClass().getName());
                     FirefoxCaps.setCapability("plugin", "git-testng");
                     
                      //To launch the firefox browser on LambdaTest cloud grid
                      String[] Tags = new String[]{"Feature", "Magicleap", "Severe"};
                      FirefoxCaps.setCapability("tags", Tags);

                      driver = new RemoteWebDriver(new URL("https://" + username + ":" + authkey + hub), FirefoxCaps);
                
                     } else if (browser.equalsIgnoreCase("edge")) {
                           
                     //To launch the edge browser on local          
                     /*driver = new EdgeDriver();*/
                    
                     //Setting edge capabilities
                     DesiredCapabilities EdgeCaps = new DesiredCapabilities();
                     EdgeCaps.setCapability("platform", "Windows 10");
                     EdgeCaps.setCapability("browserName", "edge");
                     EdgeCaps.setCapability("version", "112.0");
                     EdgeCaps.setCapability("build", "TestNG With Java");
                     EdgeCaps.setCapability("name", m.getName() + this.getClass().getName());
                     EdgeCaps.setCapability("plugin", "git-testng");
       
                      //To launch the edge browser on LambdaTest cloud grid
                      String[] Tags = new String[]{"Feature", "Magicleap", "Severe"};
                      EdgeCaps.setCapability("tags", Tags);

                      driver = new RemoteWebDriver(new URL("https://" + username + ":" + authkey + hub), EdgeCaps);
                
                     } else {

                         throw new IllegalArgumentException("Invalid browser name: " + browser);
                     }

              // Use the driver instance to navigate to a webpage and perform some actions
              driver.get("https://www.lambdatest.com");
            
              System.out.println(driver.getTitle());

              // Close the driver instance
              driver.quit();
          }
      }
}
```

![image](https://cdn-images-1.medium.com/max/800/0*wkirXZYNOziPvv42.png)

You will see that a list of browser names has been initialized with the help of the *Arrays.asList()* in Java. This list is then iterated through a *for-each* loop to instantiate the *driver* class of the respective browser.

You can run the tests on LambdaTest, a unified digital experience testing platform that allows you to perform [Java automation testing](https://www.lambdatest.com/java-automation-testing?utm_source=devto&utm_medium=organic&utm_campaign=aug_04&utm_term=ap&utm_content=webpage) on an [online Selenium Grid](https://www.lambdatest.com/selenium-grid-online?utm_source=devto&utm_medium=organic&utm_campaign=aug_04&utm_term=ap&utm_content=webpage) across 3000+ browsers and real devices. You can generate automation capabilities for your tests via the [LambdaTest capabilities generator](https://www.lambdatest.com/capabilities-generator?utm_source=devto&utm_medium=organic&utm_campaign=aug_04&utm_term=ap&utm_content=webpage). The code snippets of the capabilities, which are automatically generated using the capabilities generator, have been included in the test code above for reference.

{% youtube SqQ8SugRDos %}

Subscribe to our [LambdaTest YouTube Channel](https://www.youtube.com/c/LambdaTest?sub_confirmation=1?utm_source=devto&utm_medium=organic&utm_campaign=aug_04&utm_term=ap&utm_content=video) for live updates with the latest tutorials around [Selenium testing](https://www.lambdatest.com/selenium-automation?utm_source=devto&utm_medium=organic&utm_campaign=aug_04&utm_term=ap&utm_content=webpage), [Cypress testing](https://www.lambdatest.com/cypress-testing?utm_source=devto&utm_medium=organic&utm_campaign=aug_04&utm_term=ap&utm_content=webpage), and more.

### Validating multiple URL redirects

A very interesting scenario that I came across in one of my previous projects was to validate a security checklist that contained a list of URLs and their expected redirected URLs.

This list was huge and contained many URLs. The best way to test this scenario was to parameterize a test method with these URLs as arguments and open all of them one by one in the browser to check the redirected URL.

***Learn why Python is the top choice for automation testing. This comprehensive tutorial provides a step-by-step guide to*** [***automation testing with python***](https://www.lambdatest.com/blog/python-automation-testing/?utm_source=devto&utm_medium=organic&utm_campaign=aug_04&utm_term=ap&utm_content=blog) ***which help you streamline your testing process.***

Although I used an Excel sheet as a data source for this test scenario, here I will try to provide a simplified code example using the *Arrays.asList()* method, which will take the URLs as arguments and print the redirected URLs on the console.

```plaintext
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class ValidateURLRedirect {

 public static void main(String args[]) throws IOException {

  //Creating ChromeDriver instance

  WebDriver driver = new ChromeDriver();

  //Initializing a String array with URLs

  String URLs[] = {"https://app.lambdatest.com/", "https://accounts.lambdatest.com/detail/profile"};

  //Passing the String array to the asList method as an argument

  List <String> URLlist = Arrays.asList(URLs);

  //Iterating through the list and printing the redirected URLs

  for (String URL: URLlist) {
   driver.get(URL);
   System.out.println(driver.getCurrentUrl());
  }
 }
}
```

**Output:**

![image](https://cdn-images-1.medium.com/max/800/0*4Y2LgFmU7B3fWGtm.png)

To gain access to these URLs, [register for a free account](https://accounts.lambdatest.com/register?_gl=1*8xb78a*_gcl_aw*R0NMLjE2ODQ4NDA4OTcuQ2p3S0NBandwYXlqQmhBbkVpd0EtN2VuYTk1clpJd2I2czNlWmt3UTdnQXdCTkJLYVJsMldnVUdFaE1BcDYySjU3cVJNRnkxNUltS0Job0NtQlVRQXZEX0J3RQ..*_gcl_au*MTk0MTU5MjM0NS4xNjgzNTI5ODg3) and log in to your LambdaTest account.

Post logging in, you can see that this code is simply converting the array of URLs into a list using the *Arrays.asList()* method and then iterating the list using a *for-each* loop to open all the URLs one by one in the browser. Once the URLs are loaded, the current page URL is extracted and printed on the console.

### Handling multiple web elements

There are certain scenarios in which you need to [handle web elements](https://www.lambdatest.com/blog/handling-webelements-in-selenium-python/?utm_source=devto&utm_medium=organic&utm_campaign=aug_04&utm_term=ap&utm_content=blog) at once to validate some functionality. A good example of such a scenario is to validate that there are no broken links or images on a webpage.

To build the logic for this scenario, you first need to collect all the links and then hit them one by one to check if the server is returning a 404 response code. The *Arrays.asList()* in Java again comes in handy here and does the job easily.

Here’s a code example for this.

```plaintext
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class ValidateLinksAndImagesExample {
public static void main(String args[]) throws IOException {
   
     //Creating ChromeDriver instance

WebDriver driver = new ChromeDriver();
       
      //Opening the test URL 

driver.get("https://the-internet.herokuapp.com/broken_images");
      //Initializing a list of img elements

       List<WebElement> allImages = driver.findElements(By.tagName("img"));

 //Creating a list to store the broken image URLs

       List<String> brokenImages = new ArrayList<String>();

//Iterating through the list of elements and hitting the img src URLs

       for (WebElement link : allImages) {
           String src = link.getAttribute("src");
           System.out.println("Testing image source "+src);
           HttpURLConnection connection = (HttpURLConnection) new URL(src).openConnection();
           connection.setRequestMethod("HEAD");
           int responseCode = connection.getResponseCode();
           if (responseCode >= 400) {

   //Adding all the broken image URLs to the list

               brokenImages.add(src);
           }
       }

       System.out.println("Broken images:");

 //Printing the broken img URLs list
 
       System.out.println(Arrays.asList(brokenImages));
      
   }

}
```

**Output:**

![image](https://cdn-images-1.medium.com/max/800/0*FYt5dSsZlYD9dmJl.png)

As you can see in this code example, all *img* elements present on the test URL are first collected into a list, and then their src URLs are extracted and hit one by one to assert the response code. All the URLs which returned 404 as a response code are added to another list, and then this list is printed on the console. There are currently two broken images available on this test URL, and the *src* URLs of both are printed in the console.

### Bonus: Arrays.asList vs. new ArrayList(Arrays.asList())

*Arrays.asList()* and *new ArrayList&lt;&gt;(Arrays.asList())* are two different ways of creating a List from an array in Java. Let’s discuss them in detail.

### Arrays.asList()

*Arrays.asList()* in Java creates a list backed by the original array. This means that any changes made to the list will be reflected in the original array and vice versa. The resulting list is fixed-size and cannot be resized. If you need a mutable list, you need to create a new list based on the original list.

**Mutable** in Java refers to those objects whose state can be changed after they are created. In this case, a mutable list is a list that can be resized by adding or removing the elements. On the other hand, an immutable list is a list in which no structural changes can be made.

***Learn why Python is the top choice for*** [***automation testing in python***](https://www.lambdatest.com/blog/python-automation-testing/?utm_source=devto&utm_medium=organic&utm_campaign=aug_04&utm_term=ap&utm_content=blog)***. This comprehensive tutorial provides a step-by-step guide to Python automation testing to help you streamline your testing process.***

Below is the code example to demonstrate that any changes made to the list will also be reflected in the original array.

```plaintext
import java.util.Arrays;
import java.util.List;

public class ModifyElementsExample {
  
   public static void main (String args[]) {
      
       //Initializing a string Array
      
       String [] arr = {"Java", "Python", "C", "Ruby"};
      
       //Getting the list view of Array
      
       List <String> list = Arrays.asList(arr);
      
       //Modifying the value of thatist
      
       list.set(3, "C++");
      
       //Printing the original Array
      
       System.out.println(Arrays.toString(arr));
      
   }

}
```

**Output:**

![image](https://cdn-images-1.medium.com/max/800/0*Ze2QLW_t4gNZT0o_.png)

Here you can see that the value of the third index of the list has been changed to “*C++*” from “*Ruby*” and when the original array was printed on the console, it also reflected the change.

The second example shown below is to prove that the list created using the *Arrays.asList()* in Java is immutable.

```plaintext
import java.util.Arrays;
import java.util.List;

public class ModifyListExample {
  
   public static void main (String args[]) {
            
       //Initializing a string Array
      
       String [] arr = {"Java", "Python", "C", "Ruby"};
      
       //Getting the list view of Array
      
       List <String> list = Arrays.asList(arr);
      
       //Modifying the structure of the list
      
       list.add("C++");
      
       //Printing the List
      
       System.out.println(list);
      
   }

}
```

**Output:**

![image](https://cdn-images-1.medium.com/max/800/0*74YcK4jFZvdE937I.png)

Here you can see that the program had thrown an *UnsupportedOperationException* when an attempt at the structural modification of the list was made using the *add()* method.

### new ArrayList(Arrays.asList())

On the other hand, *new ArrayList&lt;&gt;(Arrays.asList())* creates a new *ArrayList* based on the elements of the array. This means any changes to the new list will not affect the original array and vice versa. The resulting list is mutable and can be resized.

```plaintext
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ModifyNewListExample {
  
   public static void main (String args[]) {
      
       //Initializing a string Array
      
       String [] arr = {"Java", "Python", "C", "Ruby"};
      
       //Getting the list view of Array
      
       List <String> list = new ArrayList<String>(Arrays.asList(arr));
      
       //Modifying the list
      
       list.add("C++");
      
       //Printing the original Array
      
       System.out.println(list);
      
   }
}
```

In the example above, the list has been modified successfully.

**Output:**

![image](https://cdn-images-1.medium.com/max/800/0*pqx5O_qY-CAp4CTH.png )

***Learn why Python is the top choice for automation testing . This comprehensive tutorial provides a step-by-step guide to*** [***automation testing in python***](https://www.lambdatest.com/blog/python-automation-testing/?utm_source=devto&utm_medium=organic&utm_campaign=aug_04&utm_term=ap&utm_content=blog) ***to help you streamline your testing process.***

### Conclusion

The *Arrays.asList()* in Java works as a bridge between the *array* and the *collection* interface. It converts an array into a fixed-size list, and any changes made to the values of the list elements will be reflected in the original array and vice versa.

This is a convenient method to implement parameterization in your tests, especially when you are not using other supporting libraries like TestNG in your framework.

Throughout this blog, we explored the syntax and usage of the *Arrays.asList()* in Java and provided examples to demonstrate its functionality.