Java修改数组长度

本文提供了一个Java类,用于调整数组长度,包括增加和减少数组元素的数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java中没有关于修改数组长度的api,在此本人提供了修改数组长度的两个函数:arrayAddLength()和arrayReduceLength().详细见代码. 
[java] view plaincopyprint?
import java.lang.reflect.Array;  
  
/** 
* Description: This class is used to adjust array length. 
* @author e421083458 
*/  
public class ArrayTest {  
  
/** 
* @param args 
*/  
public static void main(String[] args) {  
int a[]= new int[]{0,1,2,3,4,5};  
int b[]= new int[]{0,1,2,3,4,5};  
a = (int[]) arrayAddLength(a,2);  
b = (int[]) arrayReduceLength(b,2);  
//out print array lenght  
System.out.println(a.length);  
for (int i=0;i<a.length;i++){  
System.out.print(a[i]);  
}  
System.out.println();  
  
System.out.println(b.length);  
for (int i=0;i<b.length;i++){  
System.out.print(b[i]);  
}  
}  
/** 
* Description: Array add length 
* @param oldArray 
* @param addLength 
* @return Object 
*/  
public static Object arrayAddLength(Object oldArray,int addLength) {  
Class c = oldArray.getClass();  
if(!c.isArray())return null;  
Class componentType = c.getComponentType();  
int length = Array.getLength(oldArray);  
int newLength = length + addLength;  
Object newArray = Array.newInstance(componentType,newLength);  
System.arraycopy(oldArray,0,newArray,0,length);  
return newArray;  
}  
/** 
* Description: Array reduce lenght 
* @param oldArray 
* @param reduceLength 
* @return Object 
*/  
public static Object arrayReduceLength(Object oldArray,int reduceLength) {  
Class c = oldArray.getClass();  
if(!c.isArray())return null;  
Class componentType = c.getComponentType();  
int length = Array.getLength(oldArray);  
int newLength = length - reduceLength;  
Object newArray = Array.newInstance(componentType,newLength);  
System.arraycopy(oldArray,0,newArray,0,newLength);  
return newArray;  
}  
}  
### Java数组长度扩展与ArrayList动态增长 在Java中,数组长度是固定的,一旦创建就无法直接更改其大小。如果需要扩展数组长度,可以通过创建一个新的数组并复制原数组的内容来实现。对于动态增长的需求,通常使用`ArrayList`来简化操作,因为`ArrayList`底层通过动态扩容机制实现了数组长度的自动调整。 #### 手动扩展数组长度 若需要手动将数组长度增加一,可以按照以下步骤完成[^4]: 1. 创建一个新数组,其长度为原数组长度加一。 2. 遍历原数组,将所有元素复制到新数组中。 3. 将新增的元素添加到新数组的末尾。 4. 将新数组的引用赋值给原数组变量。 以下是代码示例: ```java int[] arr1 = {1, 2, 3}; int[] arr2 = new int[arr1.length + 1]; // 创建新数组长度加一 for (int i = 0; i < arr1.length; i++) { arr2[i] = arr1[i]; // 复制原数组内容 } arr2[arr1.length] = 4; // 添加新元素 arr1 = arr2; // 更新原数组引用 ``` #### 使用ArrayList动态增长 `ArrayList`是一种动态数组结构,其底层基于数组实现。当向`ArrayList`中添加元素时,如果当前容量不足,它会自动扩容。默认情况下,`ArrayList`的初始容量为10,扩容时会将容量增加到原来的1.5倍[^2]。 以下是`ArrayList`的动态扩容机制的核心逻辑[^3]: 1. 如果`ArrayList`的容量不足以容纳新的元素,则会创建一个更大的数组。 2. 新数组的容量通常是原数组容量的1.5倍。 3. 将原数组中的所有元素复制到新数组中。 4. 更新`elementData`引用以指向新数组。 以下是`ArrayList`的源码片段展示扩容过程: ```java public boolean add(E e) { ensureCapacityInternal(size + 1); // 确保容量足够 elementData[size++] = e; return true; } private void ensureCapacityInternal(int minCapacity) { if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) { minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity); } ensureExplicitCapacity(minCapacity); } private void ensureExplicitCapacity(int minCapacity) { if (minCapacity - elementData.length > 0) grow(minCapacity); } private void grow(int minCapacity) { int oldCapacity = elementData.length; int newCapacity = oldCapacity + (oldCapacity >> 1); // 扩容为1.5倍 if (newCapacity - minCapacity < 0) newCapacity = minCapacity; elementData = Arrays.copyOf(elementData, newCapacity); } ``` #### 总结 - 如果需要手动扩展数组长度,可以通过创建新数组并复制元素的方式实现[^4]。 - 如果需要动态管理数组长度,建议使用`ArrayList`,它能够自动处理扩容问题,并提供更便捷的操作接口。 ### 示例代码 以下是一个完整的示例,展示了如何手动扩展数组以及使用`ArrayList`动态增长: ```java // 手动扩展数组长度 int[] arr1 = {1, 2, 3}; int[] arr2 = new int[arr1.length + 1]; System.arraycopy(arr1, 0, arr2, 0, arr1.length); arr2[arr1.length] = 4; arr1 = arr2; // 使用 ArrayList 动态增长 ArrayList<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); // 自动扩容 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值