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