Table of Contents
1. Avoid using basic data type arrays to convert to lists " >1. Avoid using basic data type arrays to convert to lists
We will make another small modification to the above example:" > We will make another small modification to the above example:
Home Java javaTutorial Java Improvement Chapter (36) -----Java Collection Details (2): Defects of asList

Java Improvement Chapter (36) -----Java Collection Details (2): Defects of asList

Feb 11, 2017 am 10:33 AM

In the actual development process, we often use asList to convert an array into a List. This method is very convenient to use, but the asList method has several flaws:

1. Avoid using basic data type arrays to convert to lists

      There is a more interesting flaw when using 8 basic type arrays to convert to lists. Let’s look at the following program first:

##

public static void main(String[] args) {
        int[] ints = {1,2,3,4,5};
        List list = Arrays.asList(ints);
        System.out.println("list'size:" + list.size());
    }
    ------------------------------------
    outPut:
    list'size:1
Copy after login

The running result of the program is not 5 as we expected. It’s an outrageous 1. What’s going on? Let’s look at the source code first:

public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }
Copy after login
Copy after login

The parameter accepted by asList is a generic variable-length parameter, we know Basic data types cannot be styled, which means that the 8 basic types cannot be used as parameters of asList. If they want to be used as generic parameters, their corresponding packaging types must be used. But why did nothing go wrong in this instance? Because this instance uses an array of type int as its parameter, and an array is an object in Java, it can be genericized. So this example will not produce errors. Since the example uses the entire int type array as a generic parameter, there will be only one int list after asList conversion. As follows:

public static void main(String[] args) {
    int[] ints = {1,2,3,4,5};
    List list = Arrays.asList(ints);
    System.out.println("list 的类型:" + list.get(0).getClass());
    System.out.println("list.get(0) == ints:" + list.get(0).equals(ints));
}
--------------------------------------------
outPut:
list 的类型:class [I
list.get(0) == ints:true
Copy after login

From this running result, we can fully prove that the elements in the list are int arrays. Once you understand this, the modification method will be clear at a glance: change int to Integer.

public static void main(String[] args) {
        Integer[] ints = {1,2,3,4,5};
        List list = Arrays.asList(ints);
        System.out.println("list&#39;size:" + list.size());
        System.out.println("list.get(0) 的类型:" + list.get(0).getClass());
        System.out.println("list.get(0) == ints[0]:" + list.get(0).equals(ints[0]));
    }
    ----------------------------------------
    outPut:
    list&#39;size:5
    list.get(0) 的类型:class java.lang.Integer
    list.get(0) == ints[0]:true
Copy after login

##>>>>>>Java details (2.1): When using asList Don't use primitive data types as parameters.

2. The list generated by asList is not operable

We will make another small modification to the above example:

public static void main(String[] args) {
        Integer[] ints = {1,2,3,4,5};
        List list = Arrays.asList(ints);
        list.add(6);
    }
Copy after login

This example is about converting ints into list categories through asList, and then adding an element through the add method. This example couldn't be simpler, but what about the running results? Type what we expected:

Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.AbstractList.add(Unknown Source)
    at java.util.AbstractList.add(Unknown Source)
    at com.chenssy.test.arrayList.AsListTest.main(AsListTest.java:10)
Copy after login

The running result throws an UnsupportedOperationException, which indicates that the list is not supported add method. This makes us depressed. How could list not support the add method? Is jdk's brain blocked? Let’s look at the source code of asList again:

public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }
Copy after login
Copy after login

After asList accepts the parameters, directly create a new ArrayList, go here There should be no errors, right? Don't worry, look down:

private static class ArrayList<E> extends AbstractList<E>
    implements RandomAccess, java.io.Serializable{
        private static final long serialVersionUID = -2764017481108945198L;
        private final E[] a;

        ArrayList(E[] array) {
            if (array==null)
                throw new NullPointerException();
            a = array;
        }
        //.................
    }
Copy after login

         

This is the source code of ArrayList, we can see it from here Out, this ArrayList is not java.util.ArrayList, it is an internal class of Arrays. This internal class provides size, toArray, get, set, indexOf, and contains methods, and methods such as add and remove to change the list results are inherited from the AbstractList parent class. At the same time, these methods are also quite strange. It directly throws an UnsupportedOperationException exception:

public boolean add(E e) {
        add(size(), e);
        return true;
    }
    
    public E set(int index, E element) {
        throw new UnsupportedOperationException();
    }
    
    public void add(int index, E element) {
        throw new UnsupportedOperationException();
    }
    
    public E remove(int index) {
        throw new UnsupportedOperationException();
    }
Copy after login

Through these codes, we can see that the list returned by asList is just a cloak of list. , it does not have the basic characteristics of list (variable length). The list is a list of immutable length. The returned list can only be as long as the array of parameters passed in. So:

>>>>>>Java details (2.2): Don't try to change the list returned by asList, otherwise you will suffer the consequences.

The above is the content of Java Improvement Chapter (36) -----Java Collection Details (2): Defects of asList , for more related content, please pay attention to the PHP Chinese website (www.php.cn)!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1658
14
PHP Tutorial
1257
29
C# Tutorial
1231
24
Is the company's security software causing the application to fail to run? How to troubleshoot and solve it? Is the company's security software causing the application to fail to run? How to troubleshoot and solve it? Apr 19, 2025 pm 04:51 PM

Troubleshooting and solutions to the company's security software that causes some applications to not function properly. Many companies will deploy security software in order to ensure internal network security. ...

How do I convert names to numbers to implement sorting and maintain consistency in groups? How do I convert names to numbers to implement sorting and maintain consistency in groups? Apr 19, 2025 pm 11:30 PM

Solutions to convert names to numbers to implement sorting In many application scenarios, users may need to sort in groups, especially in one...

How does IntelliJ IDEA identify the port number of a Spring Boot project without outputting a log? How does IntelliJ IDEA identify the port number of a Spring Boot project without outputting a log? Apr 19, 2025 pm 11:45 PM

Start Spring using IntelliJIDEAUltimate version...

How to simplify field mapping issues in system docking using MapStruct? How to simplify field mapping issues in system docking using MapStruct? Apr 19, 2025 pm 06:21 PM

Field mapping processing in system docking often encounters a difficult problem when performing system docking: how to effectively map the interface fields of system A...

How to safely convert Java objects to arrays? How to safely convert Java objects to arrays? Apr 19, 2025 pm 11:33 PM

Conversion of Java Objects and Arrays: In-depth discussion of the risks and correct methods of cast type conversion Many Java beginners will encounter the conversion of an object into an array...

How to elegantly obtain entity class variable names to build database query conditions? How to elegantly obtain entity class variable names to build database query conditions? Apr 19, 2025 pm 11:42 PM

When using MyBatis-Plus or other ORM frameworks for database operations, it is often necessary to construct query conditions based on the attribute name of the entity class. If you manually every time...

How to use the Redis cache solution to efficiently realize the requirements of product ranking list? How to use the Redis cache solution to efficiently realize the requirements of product ranking list? Apr 19, 2025 pm 11:36 PM

How does the Redis caching solution realize the requirements of product ranking list? During the development process, we often need to deal with the requirements of rankings, such as displaying a...

E-commerce platform SKU and SPU database design: How to take into account both user-defined attributes and attributeless products? E-commerce platform SKU and SPU database design: How to take into account both user-defined attributes and attributeless products? Apr 19, 2025 pm 11:27 PM

Detailed explanation of the design of SKU and SPU tables on e-commerce platforms This article will discuss the database design issues of SKU and SPU in e-commerce platforms, especially how to deal with user-defined sales...

See all articles