How to resize an array in Java

How to resize an array in Java

In Java, arrays cannot be resized dynamically. One approach is to use java.util.ArrayList (or java.util.Vector) instead of a native array. Another (faster) solution is to re-allocate the array with a different size and to copy the contents of the old array to the new array. The generic function resizeArray (below) can be used to do that.

Update: Starting with Java 1.6, there is a library function that does the same: java.utils.Arrays.copyOf().



/**
* Reallocates an array with a new size, and copies the contents
* of the old array to the new array.
* @param oldArray the old array, to be reallocated.
* @param newSize the new array size.
* @return A new array with the same contents.
*/
private static Object resizeArray (Object oldArray, int newSize) {
 int oldSize = java.lang.reflect.Array.getLength(oldArray);
 Class elementType = oldArray.getClass().getComponentType();
 Object newArray = java.lang.reflect.Array.newInstance(
 elementType, newSize);
 int preserveLength = Math.min(oldSize, newSize);
 if (preserveLength > 0)
 System.arraycopy(oldArray, 0, newArray, 0, preserveLength);
 return newArray; }



// Test routine for resizeArray().
public static void main (String[] args) {
 int[] a = {1, 2, 3};
 a = (int[])resizeArray(a, 5);
 a[3] = 4;
 a[4] = 5;
 for (int i=0; i<a.length; i++)
 System.out.println(a[i]); }


How to resize a two-dimensional array

Two-dimensional arrays in Java are arrays of arrays. To resize a two-dimensional array, the resizeArray function must be applied to the outer array and to all the nested arrays.
Example:

 int a[][] = new int[2][3];
 //...
 a = (int[][])resizeArray(a, 20);
 // new array is [20][3]
 for (int i=0; i<a.length; i++) {
 if (a[i] == null)
 a[i] = new int[30];
 else a[i] = (int[])resizeArray(a[i], 30); }
 // new array is [20][30]


Author: Christian d'Heureuse (www.source-code.biz, www.inventec.ch/chdh)
License: Free / LGPL
Index

AltStyle によって変換されたページ (->オリジナル) /