Home >Java >javaTutorial >Solution to Java collection size immutable exception (ImmutableSizeException)

Solution to Java collection size immutable exception (ImmutableSizeException)

PHPz
PHPzOriginal
2023-08-18 21:46:071179browse

Solution to Java collection size immutable exception (ImmutableSizeException)

Solution to solve Java collection immutable size exception (ImmutableSizeException)

When using Java collections, sometimes you will encounter immutable size exception (ImmutableSizeException) . This exception usually occurs when trying to modify the size of a collection, but the collection has been predefined as immutable. This article will introduce several solutions to this problem and give corresponding code examples.

  1. Using immutable collections
    Immutable collections refer to collections that cannot be modified once created. There are some libraries in Java that provide implementations of immutable collections, such as Guava's ImmutableList and ImmutableSet. Using these immutable collections avoids the problem of modifying the collection size.
import com.google.common.collect.ImmutableList;

public class ImmutableCollectionExample {
    public static void main(String[] args) {
        ImmutableList<String> names = ImmutableList.of("Alice", "Bob", "Charlie");
        // 尝试修改集合大小,将会抛出UnsupportedOperationException异常
        names.add("David");
    }
}
  1. Create a copy and perform operations
    If you must modify the size of the collection, one solution is to create a copy of the collection, operate on the copy, and then assign the result to the original collection . This avoids directly modifying immutable collections.
import java.util.ArrayList;
import java.util.List;

public class CopyCollectionExample {
    public static void main(String[] args) {
        List<String> names = new ArrayList<>();
        names.add("Alice");
        names.add("Bob");
        names.add("Charlie");

        // 创建副本进行操作
        List<String> updatedNames = new ArrayList<>(names);
        updatedNames.add("David");

        // 将结果赋值给原始集合
        names = updatedNames;
    }
}
  1. Use mutable collections
    If you need to modify the collection size frequently, you can consider using mutable collections, such as ArrayList. The size of a mutable collection can be modified, but attention needs to be paid to synchronization issues in a multi-threaded environment.
import java.util.ArrayList;
import java.util.List;

public class MutableCollectionExample {
    public static void main(String[] args) {
        List<String> names = new ArrayList<>();
        names.add("Alice");
        names.add("Bob");
        names.add("Charlie");

        // 修改集合大小
        names.add("David");
    }
}

No matter which solution is chosen, it should be decided based on the specific needs and scenarios. If you only need to read the collection data without modifying it, immutable collections are a better choice. If the collection size needs to be changed frequently, mutable collections are more convenient. In addition, we must also pay attention to the operation of collections in a multi-threaded environment to ensure thread safety.

Summary:

  • Use immutable collections, such as Guava's ImmutableList and ImmutableSet, to avoid the problem of modifying the size of the collection;
  • Create a copy for operation, and Assigning the result to the original collection can solve the problem of immutable collection size;
  • If you need to modify the collection size frequently, you can use variable collections and pay attention to synchronization issues in multi-threaded environments.

Through the above solutions, the problem of Java collection size immutable exception (ImmutableSizeException) can be effectively solved and the reliability and stability of the program can be improved.

The above is the detailed content of Solution to Java collection size immutable exception (ImmutableSizeException). For more information, please follow other related articles on the PHP Chinese website!

Statement:
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