在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() 方法查找数组的长度。