Multidimensional Arrays in Java Vidhu S. Kapadia The Basic Definitions • What is an Array? • An array is a fixed size sequential collection of elements of identical types. • They are created with either a new operator or array initializes • The storage space for arrays is allocated from the garbagecollected heap. • The element in an array are indexed by the integers 0 to n- 1, where n is the size of the array Declaring an Array • Using the new operator new Type [ ] Here the size of the array must be specified, and all the elements in the array are initialized to the default initial values based on the types of elements. int ia1 = new int [3]; //creates an integer array of size 3; all elements are initialized to 0 Point pa [ ] = new Point [10]; //creates an array of points of size 10; all elements are initialized to null Declaring an Array • Using the one-dimensional array initializer {v0, v1, …..,vn-1} The values for v0, v1, …..,vn-1 are the initial values of the elements in the array. The size of the array is determined by the number of initial values provided in the array initializer Int ia2 [ ] = {1, 2, 3}; // Creates an array of size 3; elements are initialized to 1, 2, and 3 respectively What are Multidimensional Arrays • A multidimensional array is treated as an array of arrays. – Let a be a k-dimensional array; the elements of a can be accessed using the following syntax: a [ i1 ] [ i2 ]…[ ik ] where n1, n2, ….., nk Multidimensional Arrays • Applying what we learned about simple arrays to multidimensional array, we get the following: A k-dimensional array can be created with either of the following methods: – Using the new operator – Using the k-dimensional initializer Creating k-dimensional Array Using the new operator • Using k-dimensional array initializer new Type [ n1] [n2]…[nk] • Size of each dimension is n1, n2, …,nk, respectively. • All the elements in the array are initialized to default initial values based on the type of the elements • {I1, I2, ...., Ik} where each I1, I2, ...., Ik is a (k-1)- dimensional array initializer. Examples… • Using the new operator, the following example is of creating and initializing a two-dimensional array. double mat1[ ][ ] = new double[4][5]; This creates a 4 x 5 two-dimensional array. All elements are initialized to 0.0. • Using k-dimensional array initializer, the following example is of creating and initializing a two-dimensional array. int mat2[ ] [ ] = {{1, 2, 3}, {4, 5, 6}}; This creates a 2 x 3 twodimensional array. The elements are initialized as: mat2[0][0]=1 mat2[0][1]=2 mat2[0][2]=3 mat2[1][0]= 4 mat2[1][1]= 5 mat2[1][2]= 6 Illustrating Two-Dimensional Array Processing Multidimensional Arrays • Multidimensional arrays are often processed using for statements. To process all the items in a two-dimensional array, a for statement needs to be nested inside another. int[ ][ ] A = new int[3][4]; The following loop stores 0 into each location in two dimensional array A: for (int row = 0; row < 3; row++) { for (int column = 0; column < 4; column++) { A [row][column] = 0; } } An Example: • Using a mathematical function in the Java Math class and handling of two–dimensional arrays, the following example calculates the max – min value. public class MaxMin{ public static void main(String[]args) { double mat[ ] [ ]= { {2.3, 5.1, 9.9}, {8.3, 4.5, 7.7}, { 5.2, 6.1, 2.8}} int n = mat.length; int m= mat[0].length; double maxmin = 0.0; Running the program for (int j = 0; j < m; j++){ produces the following double min = mat[j][0]; result: for (int i = 1; I <n ; i ++){ The max-min value is 4.5 min = Math.min(min,mat[i][j]); } if (j==0){ maxmin = min; }else{ maxmin = Math.max(maxmin, min); } } System.out.println(“The max-min value is” + maxmin); } } Keep in mind that… • Computer memory is linear – • In accessing a multidimensional array you are really accessing a one-dimensional array in memory. • You can simulate multidimensional arrays by packing them into a one-dimensional array. • The two manners of packing the one-dimensional array are row-major order, where the array is filled one row at a time; and column-major order, where columns are placed into the array. Interesting Tidbits about Arrays in Java • One of the main differences between the arrays in Java and those in C/C++ is that the Java arrays are ALWAYS bounds-checked at run time. • Array bound-checking will automatically detect a major source of faults in programs, that is exceeding the bounds of arrays while accessing or manipulating their elements. • There is no limit on the number of dimensions that an array type can have. However, arrays of dimension three or higher are fairly uncommon. References • Jia, Xiaoping. Object Oriented Software Development using Java- 2nd edition, Adison Wesley 2003 • The historical collection classes – Arrays, IBM. April, 16, 2006, http://www-128.ibm.com/developerworks/java/library/jarrays/ • Array initialization, The Code Guru. April, 16, 2006, http://codeguru.earthweb.com/java/tij/tij0053.shtml