Course Code: COP 3330Department: Computer ScienceUniversity: University of Central FloridaInstructor: Dr. Bacanli
An array is an elementary data structure that allows for the storage of multiple values of the same type. Data structures are collections of related data items. Arrays are particularly useful when a fixed number of related data items must be stored, enabling efficient access and manipulation of the data.
Fixed Size: The size of an array is defined at the time of its creation and cannot be altered once initialized. If an array needs to grow or shrink, a new array must be created and data copied over.
Contiguous Memory Allocation: Elements in an array are stored in contiguous memory locations. This allows for faster access via indexing compared to other data structures like linked lists, where elements can be scattered in memory.
Example of an Array:c[0] = -6; c[1] = 2341; c[2] = -53; c[3] = 11; c[4] = 22; c[5] = 34; c[6] = 34; c[7] = 78;
Java's array syntax can sometimes be different from that of C or other programming languages. Here are some examples of correct and incorrect statements:
int[] arr;
arr = new int[5];
int arr[]; // not preferred
int[] arr = new int[3];
int arr[] = {45, 45, 223, 3424, 434};
Arrays must be instantiated after they are declared. Both declaration and instantiation can be combined. Here are some examples of initialization:Example with a variable:
int number = 4;
int[] arr = new int[number];
Final variable example:
final int NUMBER = 4;
int[] arr = new int[NUMBER];
Both methods are valid and demonstrate flexibility in assigning array sizes.
When an array is declared, each element is initialized to a default value based on the datatype as follows:
Numeric types (int, float, double, etc.) are initialized to 0.
Boolean types are initialized to false.
Object types are initialized to null.
One-dimensional array:int[] arr = {4, 5, 6, 7};
Two-dimensional array:int[][] arr2d = {{2,3}, {4,5}, {6,7}};
Error example:
int[] arr = new int[1];
arr[0] = 4;
arr[1] = 4; // this will cause an ArrayIndexOutOfBoundsException
There are several methods to traverse a 1D array:
Enhanced for-loop:
for(int i : arr) {
System.out.println(i);
}
Regular for-loop:
for(int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
A 2D array can be conceptualized as a table, while a 3D array can be viewed as a cube. Here’s how to access elements:
arr[2][3]
refers to the 2nd row and 3rd column.
Number of columns: arr[0].length = 4
Number of rows: arr.length = 5
int[][] arr = new int[5][4];
For traversing a 2D array, nested loops are utilized:
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
If all rows have the same size, arr[0].length
will be consistent across rows.
An example of variable row sizes is:
int[][] arr2d = {{3}, {4, 5}, {4, 5, 6}};
for(int i = 0; i < arr2d.length; i++) {
for(int j = 0; j < arr2d[i].length; j++) {
System.out.print(arr2d[i][j] + " ");
}
System.out.println();
}
Java includes various utility methods for arrays. The following import statement is necessary:
import java.util.Arrays;
Arrays.sort() - sorts the elements of an array.
Arrays.toString() - converts an array to a string for display, useful for quick debugging.
Arrays.copyOf() - used for copying or truncating an array efficiently.
Arrays.fill() - populates an array with a single value or fills a subarray with specific value.
Arrays possess a length attribute that indicates the number of elements they hold. This is crucial for avoiding ArrayIndexOutOfBoundsException
when accessing elements.
public static int[] processArray(int[] arr) {
for(int i = 0; i < arr.length; i++) {
arr[i] = -1;
}
return arr;
}
The Arrays class contains several helpful methods for working with arrays.
Printing the array - provides visual output of the array's contents.
Sorting the array - essential for algorithms that require ordered data.
Searching within the array - efficient methods to locate data within the array.
int[] array = {45, 34, 45, 67, 11, 3, 99, -2};
Arrays.sort(array);
for(int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
Java sorts numbers in ascending order by default.
Converts an array to a string for display.Example:
int[] array = {45, 56, 11, 23, 44};
String convertedOutput = Arrays.toString(array);
System.out.println(convertedOutput);
Used for copying or truncating an array. Requires two arguments: the original array and the new length.Example:
int[] orig = new int[]{1, 2, 3};
int[] copy = Arrays.copyOf(orig, 5);
System.out.println(Arrays.toString(copy));
Note: Empty slots are filled with default values (0 for integers).
Shallow Copy:
int[] arr = {45, 56};
int[] arr2 = {4, 4};
arr = arr2; // Changes to arr2 will affect arr as both refer to the same memory location.
Deep Copy: A new array is created with duplicated values to ensure data isolation.
Populates an array with a single specified value.Example of filling specific subarrays:
Arrays.fill(ar, 1, 5, 10); // Fills from index 1 to 4 with 10
Arrays.fill(ar, 10); // Fills the entire array with 10
Void methods: These methods do not return a value, but they can modify the original array directly.Return methods: The original array is returned and could potentially be modified during the process.Example:
public static int[] fixAll(int[] arr) {
for(int el : arr) {
el = 5;
}
return arr;
}
Prefer the long form of array operations for modifications to avoid confusion and ensure clarity in code.
Understand the distinctions between shorthand and longhand operations to ensure accurate modifications while working with arrays.