External Interfaces/API |
Working with Java Arrays
You can pass singular Java objects to and from methods or you may pass them in an array, providing the method expects them in that form. This array must either be a Java array (returned from another method call or created within MATLAB) or, under certain circumstances, a MATLAB cell array. This section describes how to create and manipulate Java arrays in MATLAB. Later sections will describe how to use MATLAB cell arrays in calls to Java methods.
This section addresses the following topics:
How MATLAB Represents the Java Array
The term java array refers to any array of Java objects returned from a call to a Java class constructor or method. You may also construct a Java array within MATLAB using the javaArray
function. The structure of a Java array is significantly different from that of a MATLAB matrix or array. MATLAB hides these differences whenever possible, allowing you to operate on the arrays using the usual MATLAB command syntax. Just the same, it may be helpful to keep the following differences in mind as you work with Java arrays.
Representing More Than One Dimension
An array in the Java language is strictly a one-dimensional structure because it is measured only in length. If you want to work with a two-dimensional array, you can create an equivalent structure using an array of arrays. To add further dimensions, you add more levels to the array, making it an array of arrays of arrays, and so on. You may want to use such multilevel arrays when working in MATLAB as it is a matrix and array-based programming language.
MATLAB makes it easy for you to work with multilevel Java arrays by treating them like the matrices and multidimensional arrays that are a part of the language itself. You access elements of an array of arrays using the same MATLAB syntax that you would use if you were handling a matrix. If you were to add more levels to the array, MATLAB would be able to access and operate on the structure as if it were a multidimensional MATLAB array.
The left side of the following figure shows Java arrays of one, two, and three dimensions. To the right of each is the way the same array is represented to you in MATLAB. Note that single-dimension arrays are represented as a column vector.
Array Indexing
Java array indexing is different than MATLAB array indexing. Java array indices are zero-based, MATLAB array indices are one-based. In Java programming, you access the elements of array y
of length N
using y[0]
through y[N-1]
. When working with this array in MATLAB, you access these same elements using the MATLAB indexing style of y(1)
through y(N)
. Thus, if you have a Java array of 10 elements, the seventh element is obtained using y(7)
, and not y[6]
as you would have used when writing a program in Java.
The Shape of the Java Array
A Java array can be different from a MATLAB array in its overall shape. A two-dimensional MATLAB array maintains a rectangular shape, as each row is of equal length and each column of equal height. The Java counterpart of this, an array of arrays, does not necessarily hold to this rectangular form. Each individual lower level array may have a different length.
Such an array structure is pictured below. This is an array of three underlying arrays of different lengths. The term ragged is commonly used to describe this arrangement of array elements as the array ends do not match up evenly. When a Java method returns an array with this type of structure, it is stored in a cell array by MATLAB.
Interpreting the Size of a Java Array
When the MATLAB size
function is applied to a simple Java array, the number of rows returned is the length of the Java array and the number of columns is always 1.
Determining the size of a Java array of arrays is not so simple. The potentially ragged shape of an array returned from Java makes it impossible to size the array in the same way as for a rectangular matrix. In a ragged Java array, there is no one value that represents the size of the lower level arrays.
When the size
function is applied to a Java array of arrays, the resulting value describes the top level of the specified array. For the Java array shown here
size(A)
returns the dimensions of the highest array level of A. The highest level of the array has a size of 3-by-1.
To find the size of a lower level array, say the five-element array in row 3, refer to the row explicitly.
You can specify a dimension in the size
command using the following syntax. However, you will probably find this useful only for sizing the first dimension, dim=1
, as this will be the only non-unary dimension.
Interpreting the Number of Dimensions of a Java Arrays
For Java arrays, whether they are simple one-level arrays or multilevel, the MATLAB ndims
function
always returns a value of 2 to indicate the number of dimensions in the array. This is a measure of the number of dimensions in the top-level array which will always be equal to 2.
How MATLAB Handles Undefined Methods | Creating an Array of Objects Within MATLAB |