Java中不可变数组实现两种方法

在Java中,数组是一种可变的数据结构,一旦创建其大小就固定了。

在这篇文章中,我们将讨论如何在 Java 中实现不可变数组。不可变意味着我们无法修改它。

如果在Java中有一个不可变数组,则指的是初始化后其内容和大小不能更改的数组。

1、unmodifiableList
如果你想创建一个不可变的数组,即在创建后不能修改其大小或元素的值,可以考虑使用java.util.Collections类的unmodifiableList方法。

这里有一个简单的例子,演示如何创建一个不可变的数组:

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class ImmutableArrayExample {
    public static void main(String[] args) {
        // 创建一个可变数组
        Integer[] mutableArray = {1, 2, 3, 4, 5};

       
// 转换为不可变列表
        List<Integer> immutableList = Collections.unmodifiableList(Arrays.asList(mutableArray));

       
// 尝试修改数组元素将抛出UnsupportedOperationException异常
       
// immutableList.add(6); // 这行代码会抛出异常

       
// 输出不可变数组的内容
        System.out.println(
"Immutable Array: " + immutableList);
    }
}

在上述示例中,通过使用Arrays.asList将可变数组转换为List,然后通过Collections.unmodifiableList创建了一个不可变的列表。请注意,尝试在不可变列表上执行修改操作(例如添加、删除元素)将导致UnsupportedOperationException异常。

请注意,虽然这种方法可以实现不可变性,但在实际编程中,如果需要不可变集合,通常使用java.util.Collections类中的不可变集合工厂方法,如Collections.unmodifiableList、Collections.unmodifiableSet和Collections.unmodifiableMap。这样可以更方便地创建不可变的集合对象。

2、包装类
要开始在 Java 中实现不可变数组,我们需要创建一个包装类,该类封装常规数组并提供访问其元素且不允许修改的方法。因此,基本上关键是确保Wrapper 类中的任何方法都不允许更改数组内容或大小。我们必须按照分步指南在 Java 中实现不可变数组。

// Java Program to Create 
// Immutable Array 
import java.util.*; 

// ImmutableArray Class 
final class ImmutableArray { 
    
// Array element 
    private final int[] array; 

    
// Constructor 
    public ImmutableArray(int[] array) { 
        
        this.array = array.clone(); 
    } 

    
// Method to access element from Array 
    public int get(int index) { 
        return array[index]; 
    } 

    
// Method to return the length of Array 
    public int length() { 
        return array.length; 
    } 


// Driver Class 
class Main { 
    
// main function 
    public static void main(String[] args) { 
        
        
// Mutable Array 
        int[] originalArray = {1, 2, 3, 4, 5}; 

        
// Create an immutable array 
        ImmutableArray immutableArray = new ImmutableArray(originalArray); 

        System.out.print(
"Elements of Array are: ");     
        
        
// Access elements 
        for(int i=0;i<immutableArray.length();i++){ 
        System.out.print(immutableArray.get(i)+
" "); 
        } 
        
        
// Access length 
        System.out.println(
"\nArray length: " + immutableArray.length()); 
    } 

上述程序的解释:
在上面的程序中,我们使用了 ImmutableArray 类来创建可变数组的克隆,我们只能使用 get() 访问,并且可以使用 length() 方法查找数组的长度。