Utilities
Arrays Utility Class
When processing data stored in arrays, you often need to sort, search, or compare them. The Arrays utility class provides optimized static methods for common array operations, eliminating the need to write these algorithms yourself.
Sorting Arrays
Sort arrays in place using optimized algorithms.
Sort.java
// Arrays.sort examples
import java.util.Arrays;
public class Sort {
public static void main(String[] args) {
System.out.println("Sort integers:");
int[] nums = {5, 2, 8, 1, 9, 3};
System.out.println("Original: " + Arrays.toString(nums));
Arrays.sort(nums);
System.out.println("Sorted: " + Arrays.toString(nums));
System.out.println("\nSort range [1, 4):");
int[] nums2 = {5, 2, 8, 1, 9, 3};
System.out.println("Original: " + Arrays.toString(nums2));
Arrays.sort(nums2, 1, 4); // Sort indices 1-3
System.out.println("Sorted: " + Arrays.toString(nums2));
System.out.println("\nSort strings:");
String[] fruits = {"banana", "apple", "cherry", "date"};
System.out.println("Original: " + Arrays.toString(fruits));
Arrays.sort(fruits);
System.out.println("Sorted: " + Arrays.toString(fruits));
System.out.println("\nSort doubles:");
double[] prices = {19.99, 5.99, 12.50, 8.75, 15.00};
System.out.println("Original: " + Arrays.toString(prices));
Arrays.sort(prices);
System.out.println("Sorted: " + Arrays.toString(prices));
System.out.println("\nSort descending:");
Integer[] values = {5, 2, 8, 1, 9, 3};
System.out.println("Original: " + Arrays.toString(values));
Arrays.sort(values, (a, b) -> b - a); // Reverse order
System.out.println("Sorted: " + Arrays.toString(values));
System.out.println("\nSort strings by length:");
String[] words = {"cat", "elephant", "dog", "butterfly"};
System.out.println("Original: " + Arrays.toString(words));
Arrays.sort(words, (a, b) -> a.length() - b.length());
System.out.println("Sorted: " + Arrays.toString(words));
System.out.println("\nSort case-insensitive:");
String[] names = {"alice", "Bob", "CHARLIE", "david"};
System.out.println("Original: " + Arrays.toString(names));
Arrays.sort(names, String.CASE_INSENSITIVE_ORDER);
System.out.println("Sorted: " + Arrays.toString(names));
System.out.println("\nParallel sort (large array):");
int[] large = new int[1000];
for (int i = 0; i < large.length; i++) {
large[i] = large.length - i;
}
Arrays.parallelSort(large);
System.out.println("First 10: " + Arrays.toString(Arrays.copyOfRange(large, 0, 10)));
System.out.println("Last 10: " + Arrays.toString(Arrays.copyOfRange(large, 990, 1000)));
System.out.println("\nVerify sorted:");
int[] sorted = {1, 2, 3, 4, 5};
int[] unsorted = {1, 3, 2, 4, 5};
System.out.println("Is [1,2,3,4,5] sorted? " + isSorted(sorted));
System.out.println("Is [1,3,2,4,5] sorted? " + isSorted(unsorted));
}
static boolean isSorted(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
if (arr[i] > arr[i + 1]) return false;
}
return true;
}
}
Arrays class
A utility class in java.util providing static methods for array manipulation including sorting, searching, and copying.
In-place sorting
Arrays.sort() modifies the original array rather than creating a new one, saving memory for large arrays.
Searching Arrays
Find elements efficiently using binary search.
Search.java
// Arrays.binarySearch examples
import java.util.Arrays;
public class Search {
public static void main(String[] args) {
System.out.println("Binary search basics:");
int[] nums = {1, 3, 5, 7, 9, 11, 13};
System.out.println("Array: " + Arrays.toString(nums));
int index = Arrays.binarySearch(nums, 7);
System.out.println("Search 7: index = " + index);
index = Arrays.binarySearch(nums, 9);
System.out.println("Search 9: index = " + index);
index = Arrays.binarySearch(nums, 1);
System.out.println("Search 1: index = " + index);
System.out.println("\nElement not found:");
index = Arrays.binarySearch(nums, 8);
System.out.println("Search 8: index = " + index);
System.out.println("Insertion point: " + (-index - 1));
index = Arrays.binarySearch(nums, 0);
System.out.println("Search 0: index = " + index);
System.out.println("Insertion point: " + (-index - 1));
index = Arrays.binarySearch(nums, 20);
System.out.println("Search 20: index = " + index);
System.out.println("Insertion point: " + (-index - 1));
System.out.println("\nSearch in range:");
int[] values = {10, 20, 30, 40, 50, 60, 70};
System.out.println("Array: " + Arrays.toString(values));
// Search only in indices 2-5
index = Arrays.binarySearch(values, 2, 5, 40);
System.out.println("Search 40 in [2,5): index = " + index);
index = Arrays.binarySearch(values, 2, 5, 60);
System.out.println("Search 60 in [2,5): index = " + index + " (not in range)");
System.out.println("\nSearch strings:");
String[] fruits = {"apple", "banana", "cherry", "date", "grape"};
System.out.println("Array: " + Arrays.toString(fruits));
index = Arrays.binarySearch(fruits, "cherry");
System.out.println("Search 'cherry': index = " + index);
index = Arrays.binarySearch(fruits, "kiwi");
System.out.println("Search 'kiwi': index = " + index);
System.out.println("\nUnsorted array (WRONG):");
int[] unsorted = {5, 2, 8, 1, 9};
System.out.println("Unsorted: " + Arrays.toString(unsorted));
index = Arrays.binarySearch(unsorted, 8);
System.out.println("Search 8: index = " + index + " (unreliable)");
// Must sort first
Arrays.sort(unsorted);
System.out.println("Sorted: " + Arrays.toString(unsorted));
index = Arrays.binarySearch(unsorted, 8);
System.out.println("Search 8: index = " + index + " (correct)");
System.out.println("\nInsert element:");
int[] arr = {1, 3, 5, 7, 9};
int newValue = ;
System.out.println("Original: " + Arrays.toString(arr));
index = Arrays.binarySearch(arr, newValue);
if (index < 0) {
int insertPos = -index - 1;
System.out.println("Insert " + newValue + " at position " + insertPos);
int[] newArr = new int[arr.length + 1];
System.arraycopy(arr, 0, newArr, 0, insertPos);
newArr[insertPos] = newValue;
System.arraycopy(arr, insertPos, newArr, insertPos + 1, arr.length - insertPos);
System.out.println("After insert: " + Arrays.toString(newArr));
}
System.out.println("\nCustom comparator search:");
String[] words = {"a", "bb", "ccc", "dddd", "eeeee"};
System.out.println("Array: " + Arrays.toString(words));
// Search by length
String target = "xxx"; // length 3
index = Arrays.binarySearch(words, target,
(a, b) -> a.length() - b.length());
System.out.println("Search length 3: index = " + index);
System.out.println("\nFind closest value:");
int[] data = {10, 25, 40, 55, 70, 85, 100};
int searchValue = ;
System.out.println("Array: " + Arrays.toString(data));
System.out.println("Search value: " + searchValue);
index = Arrays.binarySearch(data, searchValue);
if (index < 0) {
int insertPos = -index - 1;
int closest;
if (insertPos == 0) {
closest = data[0];
} else if (insertPos == data.length) {
closest = data[data.length - 1];
} else {
int left = data[insertPos - 1];
int right = data[insertPos];
closest = (searchValue - left < right - searchValue) ? left : right;
}
System.out.println("Closest value: " + closest);
} else {
System.out.println("Exact match: " + data[index]);
}
}
}
// Arrays.binarySearch examples
import java.util.Arrays;
public class Search {
public static void main(String[] args) {
System.out.println("Binary search basics:");
int[] nums = {1, 3, 5, 7, 9, 11, 13};
System.out.println("Array: " + Arrays.toString(nums));
int index = Arrays.binarySearch(nums, 7);
System.out.println("Search 7: index = " + index);
index = Arrays.binarySearch(nums, 9);
System.out.println("Search 9: index = " + index);
index = Arrays.binarySearch(nums, 1);
System.out.println("Search 1: index = " + index);
System.out.println("\nElement not found:");
index = Arrays.binarySearch(nums, 8);
System.out.println("Search 8: index = " + index);
System.out.println("Insertion point: " + (-index - 1));
index = Arrays.binarySearch(nums, 0);
System.out.println("Search 0: index = " + index);
System.out.println("Insertion point: " + (-index - 1));
index = Arrays.binarySearch(nums, 20);
System.out.println("Search 20: index = " + index);
System.out.println("Insertion point: " + (-index - 1));
System.out.println("\nSearch in range:");
int[] values = {10, 20, 30, 40, 50, 60, 70};
System.out.println("Array: " + Arrays.toString(values));
// Search only in indices 2-5
index = Arrays.binarySearch(values, 2, 5, 40);
System.out.println("Search 40 in [2,5): index = " + index);
index = Arrays.binarySearch(values, 2, 5, 60);
System.out.println("Search 60 in [2,5): index = " + index + " (not in range)");
System.out.println("\nSearch strings:");
String[] fruits = {"apple", "banana", "cherry", "date", "grape"};
System.out.println("Array: " + Arrays.toString(fruits));
index = Arrays.binarySearch(fruits, "cherry");
System.out.println("Search 'cherry': index = " + index);
index = Arrays.binarySearch(fruits, "kiwi");
System.out.println("Search 'kiwi': index = " + index);
System.out.println("\nUnsorted array (WRONG):");
int[] unsorted = {5, 2, 8, 1, 9};
System.out.println("Unsorted: " + Arrays.toString(unsorted));
index = Arrays.binarySearch(unsorted, 8);
System.out.println("Search 8: index = " + index + " (unreliable)");
// Must sort first
Arrays.sort(unsorted);
System.out.println("Sorted: " + Arrays.toString(unsorted));
index = Arrays.binarySearch(unsorted, 8);
System.out.println("Search 8: index = " + index + " (correct)");
System.out.println("\nInsert element:");
int[] arr = {1, 3, 5, 7, 9};
int newValue = ;
System.out.println("Original: " + Arrays.toString(arr));
index = Arrays.binarySearch(arr, newValue);
if (index < 0) {
int insertPos = -index - 1;
System.out.println("Insert " + newValue + " at position " + insertPos);
int[] newArr = new int[arr.length + 1];
System.arraycopy(arr, 0, newArr, 0, insertPos);
newArr[insertPos] = newValue;
System.arraycopy(arr, insertPos, newArr, insertPos + 1, arr.length - insertPos);
System.out.println("After insert: " + Arrays.toString(newArr));
}
System.out.println("\nCustom comparator search:");
String[] words = {"a", "bb", "ccc", "dddd", "eeeee"};
System.out.println("Array: " + Arrays.toString(words));
// Search by length
String target = "xxx"; // length 3
index = Arrays.binarySearch(words, target,
(a, b) -> a.length() - b.length());
System.out.println("Search length 3: index = " + index);
System.out.println("\nFind closest value:");
int[] data = {10, 25, 40, 55, 70, 85, 100};
int searchValue = ;
System.out.println("Array: " + Arrays.toString(data));
System.out.println("Search value: " + searchValue);
index = Arrays.binarySearch(data, searchValue);
if (index < 0) {
int insertPos = -index - 1;
int closest;
if (insertPos == 0) {
closest = data[0];
} else if (insertPos == data.length) {
closest = data[data.length - 1];
} else {
int left = data[insertPos - 1];
int right = data[insertPos];
closest = (searchValue - left < right - searchValue) ? left : right;
}
System.out.println("Closest value: " + closest);
} else {
System.out.println("Exact match: " + data[index]);
}
}
}
// Arrays.binarySearch examples
import java.util.Arrays;
public class Search {
public static void main(String[] args) {
System.out.println("Binary search basics:");
int[] nums = {1, 3, 5, 7, 9, 11, 13};
System.out.println("Array: " + Arrays.toString(nums));
int index = Arrays.binarySearch(nums, 7);
System.out.println("Search 7: index = " + index);
index = Arrays.binarySearch(nums, 9);
System.out.println("Search 9: index = " + index);
index = Arrays.binarySearch(nums, 1);
System.out.println("Search 1: index = " + index);
System.out.println("\nElement not found:");
index = Arrays.binarySearch(nums, 8);
System.out.println("Search 8: index = " + index);
System.out.println("Insertion point: " + (-index - 1));
index = Arrays.binarySearch(nums, 0);
System.out.println("Search 0: index = " + index);
System.out.println("Insertion point: " + (-index - 1));
index = Arrays.binarySearch(nums, 20);
System.out.println("Search 20: index = " + index);
System.out.println("Insertion point: " + (-index - 1));
System.out.println("\nSearch in range:");
int[] values = {10, 20, 30, 40, 50, 60, 70};
System.out.println("Array: " + Arrays.toString(values));
// Search only in indices 2-5
index = Arrays.binarySearch(values, 2, 5, 40);
System.out.println("Search 40 in [2,5): index = " + index);
index = Arrays.binarySearch(values, 2, 5, 60);
System.out.println("Search 60 in [2,5): index = " + index + " (not in range)");
System.out.println("\nSearch strings:");
String[] fruits = {"apple", "banana", "cherry", "date", "grape"};
System.out.println("Array: " + Arrays.toString(fruits));
index = Arrays.binarySearch(fruits, "cherry");
System.out.println("Search 'cherry': index = " + index);
index = Arrays.binarySearch(fruits, "kiwi");
System.out.println("Search 'kiwi': index = " + index);
System.out.println("\nUnsorted array (WRONG):");
int[] unsorted = {5, 2, 8, 1, 9};
System.out.println("Unsorted: " + Arrays.toString(unsorted));
index = Arrays.binarySearch(unsorted, 8);
System.out.println("Search 8: index = " + index + " (unreliable)");
// Must sort first
Arrays.sort(unsorted);
System.out.println("Sorted: " + Arrays.toString(unsorted));
index = Arrays.binarySearch(unsorted, 8);
System.out.println("Search 8: index = " + index + " (correct)");
System.out.println("\nInsert element:");
int[] arr = {1, 3, 5, 7, 9};
int newValue = ;
System.out.println("Original: " + Arrays.toString(arr));
index = Arrays.binarySearch(arr, newValue);
if (index < 0) {
int insertPos = -index - 1;
System.out.println("Insert " + newValue + " at position " + insertPos);
int[] newArr = new int[arr.length + 1];
System.arraycopy(arr, 0, newArr, 0, insertPos);
newArr[insertPos] = newValue;
System.arraycopy(arr, insertPos, newArr, insertPos + 1, arr.length - insertPos);
System.out.println("After insert: " + Arrays.toString(newArr));
}
System.out.println("\nCustom comparator search:");
String[] words = {"a", "bb", "ccc", "dddd", "eeeee"};
System.out.println("Array: " + Arrays.toString(words));
// Search by length
String target = "xxx"; // length 3
index = Arrays.binarySearch(words, target,
(a, b) -> a.length() - b.length());
System.out.println("Search length 3: index = " + index);
System.out.println("\nFind closest value:");
int[] data = {10, 25, 40, 55, 70, 85, 100};
int searchValue = ;
System.out.println("Array: " + Arrays.toString(data));
System.out.println("Search value: " + searchValue);
index = Arrays.binarySearch(data, searchValue);
if (index < 0) {
int insertPos = -index - 1;
int closest;
if (insertPos == 0) {
closest = data[0];
} else if (insertPos == data.length) {
closest = data[data.length - 1];
} else {
int left = data[insertPos - 1];
int right = data[insertPos];
closest = (searchValue - left < right - searchValue) ? left : right;
}
System.out.println("Closest value: " + closest);
} else {
System.out.println("Exact match: " + data[index]);
}
}
}
// Arrays.binarySearch examples
import java.util.Arrays;
public class Search {
public static void main(String[] args) {
System.out.println("Binary search basics:");
int[] nums = {1, 3, 5, 7, 9, 11, 13};
System.out.println("Array: " + Arrays.toString(nums));
int index = Arrays.binarySearch(nums, 7);
System.out.println("Search 7: index = " + index);
index = Arrays.binarySearch(nums, 9);
System.out.println("Search 9: index = " + index);
index = Arrays.binarySearch(nums, 1);
System.out.println("Search 1: index = " + index);
System.out.println("\nElement not found:");
index = Arrays.binarySearch(nums, 8);
System.out.println("Search 8: index = " + index);
System.out.println("Insertion point: " + (-index - 1));
index = Arrays.binarySearch(nums, 0);
System.out.println("Search 0: index = " + index);
System.out.println("Insertion point: " + (-index - 1));
index = Arrays.binarySearch(nums, 20);
System.out.println("Search 20: index = " + index);
System.out.println("Insertion point: " + (-index - 1));
System.out.println("\nSearch in range:");
int[] values = {10, 20, 30, 40, 50, 60, 70};
System.out.println("Array: " + Arrays.toString(values));
// Search only in indices 2-5
index = Arrays.binarySearch(values, 2, 5, 40);
System.out.println("Search 40 in [2,5): index = " + index);
index = Arrays.binarySearch(values, 2, 5, 60);
System.out.println("Search 60 in [2,5): index = " + index + " (not in range)");
System.out.println("\nSearch strings:");
String[] fruits = {"apple", "banana", "cherry", "date", "grape"};
System.out.println("Array: " + Arrays.toString(fruits));
index = Arrays.binarySearch(fruits, "cherry");
System.out.println("Search 'cherry': index = " + index);
index = Arrays.binarySearch(fruits, "kiwi");
System.out.println("Search 'kiwi': index = " + index);
System.out.println("\nUnsorted array (WRONG):");
int[] unsorted = {5, 2, 8, 1, 9};
System.out.println("Unsorted: " + Arrays.toString(unsorted));
index = Arrays.binarySearch(unsorted, 8);
System.out.println("Search 8: index = " + index + " (unreliable)");
// Must sort first
Arrays.sort(unsorted);
System.out.println("Sorted: " + Arrays.toString(unsorted));
index = Arrays.binarySearch(unsorted, 8);
System.out.println("Search 8: index = " + index + " (correct)");
System.out.println("\nInsert element:");
int[] arr = {1, 3, 5, 7, 9};
int newValue = ;
System.out.println("Original: " + Arrays.toString(arr));
index = Arrays.binarySearch(arr, newValue);
if (index < 0) {
int insertPos = -index - 1;
System.out.println("Insert " + newValue + " at position " + insertPos);
int[] newArr = new int[arr.length + 1];
System.arraycopy(arr, 0, newArr, 0, insertPos);
newArr[insertPos] = newValue;
System.arraycopy(arr, insertPos, newArr, insertPos + 1, arr.length - insertPos);
System.out.println("After insert: " + Arrays.toString(newArr));
}
System.out.println("\nCustom comparator search:");
String[] words = {"a", "bb", "ccc", "dddd", "eeeee"};
System.out.println("Array: " + Arrays.toString(words));
// Search by length
String target = "xxx"; // length 3
index = Arrays.binarySearch(words, target,
(a, b) -> a.length() - b.length());
System.out.println("Search length 3: index = " + index);
System.out.println("\nFind closest value:");
int[] data = {10, 25, 40, 55, 70, 85, 100};
int searchValue = ;
System.out.println("Array: " + Arrays.toString(data));
System.out.println("Search value: " + searchValue);
index = Arrays.binarySearch(data, searchValue);
if (index < 0) {
int insertPos = -index - 1;
int closest;
if (insertPos == 0) {
closest = data[0];
} else if (insertPos == data.length) {
closest = data[data.length - 1];
} else {
int left = data[insertPos - 1];
int right = data[insertPos];
closest = (searchValue - left < right - searchValue) ? left : right;
}
System.out.println("Closest value: " + closest);
} else {
System.out.println("Exact match: " + data[index]);
}
}
}
// Arrays.binarySearch examples
import java.util.Arrays;
public class Search {
public static void main(String[] args) {
System.out.println("Binary search basics:");
int[] nums = {1, 3, 5, 7, 9, 11, 13};
System.out.println("Array: " + Arrays.toString(nums));
int index = Arrays.binarySearch(nums, 7);
System.out.println("Search 7: index = " + index);
index = Arrays.binarySearch(nums, 9);
System.out.println("Search 9: index = " + index);
index = Arrays.binarySearch(nums, 1);
System.out.println("Search 1: index = " + index);
System.out.println("\nElement not found:");
index = Arrays.binarySearch(nums, 8);
System.out.println("Search 8: index = " + index);
System.out.println("Insertion point: " + (-index - 1));
index = Arrays.binarySearch(nums, 0);
System.out.println("Search 0: index = " + index);
System.out.println("Insertion point: " + (-index - 1));
index = Arrays.binarySearch(nums, 20);
System.out.println("Search 20: index = " + index);
System.out.println("Insertion point: " + (-index - 1));
System.out.println("\nSearch in range:");
int[] values = {10, 20, 30, 40, 50, 60, 70};
System.out.println("Array: " + Arrays.toString(values));
// Search only in indices 2-5
index = Arrays.binarySearch(values, 2, 5, 40);
System.out.println("Search 40 in [2,5): index = " + index);
index = Arrays.binarySearch(values, 2, 5, 60);
System.out.println("Search 60 in [2,5): index = " + index + " (not in range)");
System.out.println("\nSearch strings:");
String[] fruits = {"apple", "banana", "cherry", "date", "grape"};
System.out.println("Array: " + Arrays.toString(fruits));
index = Arrays.binarySearch(fruits, "cherry");
System.out.println("Search 'cherry': index = " + index);
index = Arrays.binarySearch(fruits, "kiwi");
System.out.println("Search 'kiwi': index = " + index);
System.out.println("\nUnsorted array (WRONG):");
int[] unsorted = {5, 2, 8, 1, 9};
System.out.println("Unsorted: " + Arrays.toString(unsorted));
index = Arrays.binarySearch(unsorted, 8);
System.out.println("Search 8: index = " + index + " (unreliable)");
// Must sort first
Arrays.sort(unsorted);
System.out.println("Sorted: " + Arrays.toString(unsorted));
index = Arrays.binarySearch(unsorted, 8);
System.out.println("Search 8: index = " + index + " (correct)");
System.out.println("\nInsert element:");
int[] arr = {1, 3, 5, 7, 9};
int newValue = ;
System.out.println("Original: " + Arrays.toString(arr));
index = Arrays.binarySearch(arr, newValue);
if (index < 0) {
int insertPos = -index - 1;
System.out.println("Insert " + newValue + " at position " + insertPos);
int[] newArr = new int[arr.length + 1];
System.arraycopy(arr, 0, newArr, 0, insertPos);
newArr[insertPos] = newValue;
System.arraycopy(arr, insertPos, newArr, insertPos + 1, arr.length - insertPos);
System.out.println("After insert: " + Arrays.toString(newArr));
}
System.out.println("\nCustom comparator search:");
String[] words = {"a", "bb", "ccc", "dddd", "eeeee"};
System.out.println("Array: " + Arrays.toString(words));
// Search by length
String target = "xxx"; // length 3
index = Arrays.binarySearch(words, target,
(a, b) -> a.length() - b.length());
System.out.println("Search length 3: index = " + index);
System.out.println("\nFind closest value:");
int[] data = {10, 25, 40, 55, 70, 85, 100};
int searchValue = ;
System.out.println("Array: " + Arrays.toString(data));
System.out.println("Search value: " + searchValue);
index = Arrays.binarySearch(data, searchValue);
if (index < 0) {
int insertPos = -index - 1;
int closest;
if (insertPos == 0) {
closest = data[0];
} else if (insertPos == data.length) {
closest = data[data.length - 1];
} else {
int left = data[insertPos - 1];
int right = data[insertPos];
closest = (searchValue - left < right - searchValue) ? left : right;
}
System.out.println("Closest value: " + closest);
} else {
System.out.println("Exact match: " + data[index]);
}
}
}
// Arrays.binarySearch examples
import java.util.Arrays;
public class Search {
public static void main(String[] args) {
System.out.println("Binary search basics:");
int[] nums = {1, 3, 5, 7, 9, 11, 13};
System.out.println("Array: " + Arrays.toString(nums));
int index = Arrays.binarySearch(nums, 7);
System.out.println("Search 7: index = " + index);
index = Arrays.binarySearch(nums, 9);
System.out.println("Search 9: index = " + index);
index = Arrays.binarySearch(nums, 1);
System.out.println("Search 1: index = " + index);
System.out.println("\nElement not found:");
index = Arrays.binarySearch(nums, 8);
System.out.println("Search 8: index = " + index);
System.out.println("Insertion point: " + (-index - 1));
index = Arrays.binarySearch(nums, 0);
System.out.println("Search 0: index = " + index);
System.out.println("Insertion point: " + (-index - 1));
index = Arrays.binarySearch(nums, 20);
System.out.println("Search 20: index = " + index);
System.out.println("Insertion point: " + (-index - 1));
System.out.println("\nSearch in range:");
int[] values = {10, 20, 30, 40, 50, 60, 70};
System.out.println("Array: " + Arrays.toString(values));
// Search only in indices 2-5
index = Arrays.binarySearch(values, 2, 5, 40);
System.out.println("Search 40 in [2,5): index = " + index);
index = Arrays.binarySearch(values, 2, 5, 60);
System.out.println("Search 60 in [2,5): index = " + index + " (not in range)");
System.out.println("\nSearch strings:");
String[] fruits = {"apple", "banana", "cherry", "date", "grape"};
System.out.println("Array: " + Arrays.toString(fruits));
index = Arrays.binarySearch(fruits, "cherry");
System.out.println("Search 'cherry': index = " + index);
index = Arrays.binarySearch(fruits, "kiwi");
System.out.println("Search 'kiwi': index = " + index);
System.out.println("\nUnsorted array (WRONG):");
int[] unsorted = {5, 2, 8, 1, 9};
System.out.println("Unsorted: " + Arrays.toString(unsorted));
index = Arrays.binarySearch(unsorted, 8);
System.out.println("Search 8: index = " + index + " (unreliable)");
// Must sort first
Arrays.sort(unsorted);
System.out.println("Sorted: " + Arrays.toString(unsorted));
index = Arrays.binarySearch(unsorted, 8);
System.out.println("Search 8: index = " + index + " (correct)");
System.out.println("\nInsert element:");
int[] arr = {1, 3, 5, 7, 9};
int newValue = ;
System.out.println("Original: " + Arrays.toString(arr));
index = Arrays.binarySearch(arr, newValue);
if (index < 0) {
int insertPos = -index - 1;
System.out.println("Insert " + newValue + " at position " + insertPos);
int[] newArr = new int[arr.length + 1];
System.arraycopy(arr, 0, newArr, 0, insertPos);
newArr[insertPos] = newValue;
System.arraycopy(arr, insertPos, newArr, insertPos + 1, arr.length - insertPos);
System.out.println("After insert: " + Arrays.toString(newArr));
}
System.out.println("\nCustom comparator search:");
String[] words = {"a", "bb", "ccc", "dddd", "eeeee"};
System.out.println("Array: " + Arrays.toString(words));
// Search by length
String target = "xxx"; // length 3
index = Arrays.binarySearch(words, target,
(a, b) -> a.length() - b.length());
System.out.println("Search length 3: index = " + index);
System.out.println("\nFind closest value:");
int[] data = {10, 25, 40, 55, 70, 85, 100};
int searchValue = ;
System.out.println("Array: " + Arrays.toString(data));
System.out.println("Search value: " + searchValue);
index = Arrays.binarySearch(data, searchValue);
if (index < 0) {
int insertPos = -index - 1;
int closest;
if (insertPos == 0) {
closest = data[0];
} else if (insertPos == data.length) {
closest = data[data.length - 1];
} else {
int left = data[insertPos - 1];
int right = data[insertPos];
closest = (searchValue - left < right - searchValue) ? left : right;
}
System.out.println("Closest value: " + closest);
} else {
System.out.println("Exact match: " + data[index]);
}
}
}
// Arrays.binarySearch examples
import java.util.Arrays;
public class Search {
public static void main(String[] args) {
System.out.println("Binary search basics:");
int[] nums = {1, 3, 5, 7, 9, 11, 13};
System.out.println("Array: " + Arrays.toString(nums));
int index = Arrays.binarySearch(nums, 7);
System.out.println("Search 7: index = " + index);
index = Arrays.binarySearch(nums, 9);
System.out.println("Search 9: index = " + index);
index = Arrays.binarySearch(nums, 1);
System.out.println("Search 1: index = " + index);
System.out.println("\nElement not found:");
index = Arrays.binarySearch(nums, 8);
System.out.println("Search 8: index = " + index);
System.out.println("Insertion point: " + (-index - 1));
index = Arrays.binarySearch(nums, 0);
System.out.println("Search 0: index = " + index);
System.out.println("Insertion point: " + (-index - 1));
index = Arrays.binarySearch(nums, 20);
System.out.println("Search 20: index = " + index);
System.out.println("Insertion point: " + (-index - 1));
System.out.println("\nSearch in range:");
int[] values = {10, 20, 30, 40, 50, 60, 70};
System.out.println("Array: " + Arrays.toString(values));
// Search only in indices 2-5
index = Arrays.binarySearch(values, 2, 5, 40);
System.out.println("Search 40 in [2,5): index = " + index);
index = Arrays.binarySearch(values, 2, 5, 60);
System.out.println("Search 60 in [2,5): index = " + index + " (not in range)");
System.out.println("\nSearch strings:");
String[] fruits = {"apple", "banana", "cherry", "date", "grape"};
System.out.println("Array: " + Arrays.toString(fruits));
index = Arrays.binarySearch(fruits, "cherry");
System.out.println("Search 'cherry': index = " + index);
index = Arrays.binarySearch(fruits, "kiwi");
System.out.println("Search 'kiwi': index = " + index);
System.out.println("\nUnsorted array (WRONG):");
int[] unsorted = {5, 2, 8, 1, 9};
System.out.println("Unsorted: " + Arrays.toString(unsorted));
index = Arrays.binarySearch(unsorted, 8);
System.out.println("Search 8: index = " + index + " (unreliable)");
// Must sort first
Arrays.sort(unsorted);
System.out.println("Sorted: " + Arrays.toString(unsorted));
index = Arrays.binarySearch(unsorted, 8);
System.out.println("Search 8: index = " + index + " (correct)");
System.out.println("\nInsert element:");
int[] arr = {1, 3, 5, 7, 9};
int newValue = ;
System.out.println("Original: " + Arrays.toString(arr));
index = Arrays.binarySearch(arr, newValue);
if (index < 0) {
int insertPos = -index - 1;
System.out.println("Insert " + newValue + " at position " + insertPos);
int[] newArr = new int[arr.length + 1];
System.arraycopy(arr, 0, newArr, 0, insertPos);
newArr[insertPos] = newValue;
System.arraycopy(arr, insertPos, newArr, insertPos + 1, arr.length - insertPos);
System.out.println("After insert: " + Arrays.toString(newArr));
}
System.out.println("\nCustom comparator search:");
String[] words = {"a", "bb", "ccc", "dddd", "eeeee"};
System.out.println("Array: " + Arrays.toString(words));
// Search by length
String target = "xxx"; // length 3
index = Arrays.binarySearch(words, target,
(a, b) -> a.length() - b.length());
System.out.println("Search length 3: index = " + index);
System.out.println("\nFind closest value:");
int[] data = {10, 25, 40, 55, 70, 85, 100};
int searchValue = ;
System.out.println("Array: " + Arrays.toString(data));
System.out.println("Search value: " + searchValue);
index = Arrays.binarySearch(data, searchValue);
if (index < 0) {
int insertPos = -index - 1;
int closest;
if (insertPos == 0) {
closest = data[0];
} else if (insertPos == data.length) {
closest = data[data.length - 1];
} else {
int left = data[insertPos - 1];
int right = data[insertPos];
closest = (searchValue - left < right - searchValue) ? left : right;
}
System.out.println("Closest value: " + closest);
} else {
System.out.println("Exact match: " + data[index]);
}
}
}
// Arrays.binarySearch examples
import java.util.Arrays;
public class Search {
public static void main(String[] args) {
System.out.println("Binary search basics:");
int[] nums = {1, 3, 5, 7, 9, 11, 13};
System.out.println("Array: " + Arrays.toString(nums));
int index = Arrays.binarySearch(nums, 7);
System.out.println("Search 7: index = " + index);
index = Arrays.binarySearch(nums, 9);
System.out.println("Search 9: index = " + index);
index = Arrays.binarySearch(nums, 1);
System.out.println("Search 1: index = " + index);
System.out.println("\nElement not found:");
index = Arrays.binarySearch(nums, 8);
System.out.println("Search 8: index = " + index);
System.out.println("Insertion point: " + (-index - 1));
index = Arrays.binarySearch(nums, 0);
System.out.println("Search 0: index = " + index);
System.out.println("Insertion point: " + (-index - 1));
index = Arrays.binarySearch(nums, 20);
System.out.println("Search 20: index = " + index);
System.out.println("Insertion point: " + (-index - 1));
System.out.println("\nSearch in range:");
int[] values = {10, 20, 30, 40, 50, 60, 70};
System.out.println("Array: " + Arrays.toString(values));
// Search only in indices 2-5
index = Arrays.binarySearch(values, 2, 5, 40);
System.out.println("Search 40 in [2,5): index = " + index);
index = Arrays.binarySearch(values, 2, 5, 60);
System.out.println("Search 60 in [2,5): index = " + index + " (not in range)");
System.out.println("\nSearch strings:");
String[] fruits = {"apple", "banana", "cherry", "date", "grape"};
System.out.println("Array: " + Arrays.toString(fruits));
index = Arrays.binarySearch(fruits, "cherry");
System.out.println("Search 'cherry': index = " + index);
index = Arrays.binarySearch(fruits, "kiwi");
System.out.println("Search 'kiwi': index = " + index);
System.out.println("\nUnsorted array (WRONG):");
int[] unsorted = {5, 2, 8, 1, 9};
System.out.println("Unsorted: " + Arrays.toString(unsorted));
index = Arrays.binarySearch(unsorted, 8);
System.out.println("Search 8: index = " + index + " (unreliable)");
// Must sort first
Arrays.sort(unsorted);
System.out.println("Sorted: " + Arrays.toString(unsorted));
index = Arrays.binarySearch(unsorted, 8);
System.out.println("Search 8: index = " + index + " (correct)");
System.out.println("\nInsert element:");
int[] arr = {1, 3, 5, 7, 9};
int newValue = ;
System.out.println("Original: " + Arrays.toString(arr));
index = Arrays.binarySearch(arr, newValue);
if (index < 0) {
int insertPos = -index - 1;
System.out.println("Insert " + newValue + " at position " + insertPos);
int[] newArr = new int[arr.length + 1];
System.arraycopy(arr, 0, newArr, 0, insertPos);
newArr[insertPos] = newValue;
System.arraycopy(arr, insertPos, newArr, insertPos + 1, arr.length - insertPos);
System.out.println("After insert: " + Arrays.toString(newArr));
}
System.out.println("\nCustom comparator search:");
String[] words = {"a", "bb", "ccc", "dddd", "eeeee"};
System.out.println("Array: " + Arrays.toString(words));
// Search by length
String target = "xxx"; // length 3
index = Arrays.binarySearch(words, target,
(a, b) -> a.length() - b.length());
System.out.println("Search length 3: index = " + index);
System.out.println("\nFind closest value:");
int[] data = {10, 25, 40, 55, 70, 85, 100};
int searchValue = ;
System.out.println("Array: " + Arrays.toString(data));
System.out.println("Search value: " + searchValue);
index = Arrays.binarySearch(data, searchValue);
if (index < 0) {
int insertPos = -index - 1;
int closest;
if (insertPos == 0) {
closest = data[0];
} else if (insertPos == data.length) {
closest = data[data.length - 1];
} else {
int left = data[insertPos - 1];
int right = data[insertPos];
closest = (searchValue - left < right - searchValue) ? left : right;
}
System.out.println("Closest value: " + closest);
} else {
System.out.println("Exact match: " + data[index]);
}
}
}
// Arrays.binarySearch examples
import java.util.Arrays;
public class Search {
public static void main(String[] args) {
System.out.println("Binary search basics:");
int[] nums = {1, 3, 5, 7, 9, 11, 13};
System.out.println("Array: " + Arrays.toString(nums));
int index = Arrays.binarySearch(nums, 7);
System.out.println("Search 7: index = " + index);
index = Arrays.binarySearch(nums, 9);
System.out.println("Search 9: index = " + index);
index = Arrays.binarySearch(nums, 1);
System.out.println("Search 1: index = " + index);
System.out.println("\nElement not found:");
index = Arrays.binarySearch(nums, 8);
System.out.println("Search 8: index = " + index);
System.out.println("Insertion point: " + (-index - 1));
index = Arrays.binarySearch(nums, 0);
System.out.println("Search 0: index = " + index);
System.out.println("Insertion point: " + (-index - 1));
index = Arrays.binarySearch(nums, 20);
System.out.println("Search 20: index = " + index);
System.out.println("Insertion point: " + (-index - 1));
System.out.println("\nSearch in range:");
int[] values = {10, 20, 30, 40, 50, 60, 70};
System.out.println("Array: " + Arrays.toString(values));
// Search only in indices 2-5
index = Arrays.binarySearch(values, 2, 5, 40);
System.out.println("Search 40 in [2,5): index = " + index);
index = Arrays.binarySearch(values, 2, 5, 60);
System.out.println("Search 60 in [2,5): index = " + index + " (not in range)");
System.out.println("\nSearch strings:");
String[] fruits = {"apple", "banana", "cherry", "date", "grape"};
System.out.println("Array: " + Arrays.toString(fruits));
index = Arrays.binarySearch(fruits, "cherry");
System.out.println("Search 'cherry': index = " + index);
index = Arrays.binarySearch(fruits, "kiwi");
System.out.println("Search 'kiwi': index = " + index);
System.out.println("\nUnsorted array (WRONG):");
int[] unsorted = {5, 2, 8, 1, 9};
System.out.println("Unsorted: " + Arrays.toString(unsorted));
index = Arrays.binarySearch(unsorted, 8);
System.out.println("Search 8: index = " + index + " (unreliable)");
// Must sort first
Arrays.sort(unsorted);
System.out.println("Sorted: " + Arrays.toString(unsorted));
index = Arrays.binarySearch(unsorted, 8);
System.out.println("Search 8: index = " + index + " (correct)");
System.out.println("\nInsert element:");
int[] arr = {1, 3, 5, 7, 9};
int newValue = ;
System.out.println("Original: " + Arrays.toString(arr));
index = Arrays.binarySearch(arr, newValue);
if (index < 0) {
int insertPos = -index - 1;
System.out.println("Insert " + newValue + " at position " + insertPos);
int[] newArr = new int[arr.length + 1];
System.arraycopy(arr, 0, newArr, 0, insertPos);
newArr[insertPos] = newValue;
System.arraycopy(arr, insertPos, newArr, insertPos + 1, arr.length - insertPos);
System.out.println("After insert: " + Arrays.toString(newArr));
}
System.out.println("\nCustom comparator search:");
String[] words = {"a", "bb", "ccc", "dddd", "eeeee"};
System.out.println("Array: " + Arrays.toString(words));
// Search by length
String target = "xxx"; // length 3
index = Arrays.binarySearch(words, target,
(a, b) -> a.length() - b.length());
System.out.println("Search length 3: index = " + index);
System.out.println("\nFind closest value:");
int[] data = {10, 25, 40, 55, 70, 85, 100};
int searchValue = ;
System.out.println("Array: " + Arrays.toString(data));
System.out.println("Search value: " + searchValue);
index = Arrays.binarySearch(data, searchValue);
if (index < 0) {
int insertPos = -index - 1;
int closest;
if (insertPos == 0) {
closest = data[0];
} else if (insertPos == data.length) {
closest = data[data.length - 1];
} else {
int left = data[insertPos - 1];
int right = data[insertPos];
closest = (searchValue - left < right - searchValue) ? left : right;
}
System.out.println("Closest value: " + closest);
} else {
System.out.println("Exact match: " + data[index]);
}
}
}
Binary search
Requires a sorted array. Returns the index if found, or a negative value indicating where the element would be inserted.
Copying Arrays
Create copies of arrays or portions of arrays.
Copy.java
// Arrays.copyOf and copyOfRange examples
import java.util.Arrays;
public class Copy {
public static void main(String[] args) {
System.out.println("CopyOf basics:");
int[] original = {1, 2, 3, 4, 5};
System.out.println("Original: " + Arrays.toString(original));
int[] copy = Arrays.copyOf(original, original.length);
System.out.println("Copy: " + Arrays.toString(copy));
// Modify copy
copy[0] = 99;
System.out.println("After modifying copy:");
System.out.println("Original: " + Arrays.toString(original));
System.out.println("Copy: " + Arrays.toString(copy));
System.out.println("\nCopy with different length:");
int[] nums = {10, 20, 30, 40, 50};
// Shorter copy
int[] shorter = Arrays.copyOf(nums, 3);
System.out.println("Shorter: " + Arrays.toString(shorter));
// Longer copy (padded with zeros)
int[] longer = Arrays.copyOf(nums, 8);
System.out.println("Longer: " + Arrays.toString(longer));
System.out.println("\nCopyOfRange:");
int[] values = {0, 10, 20, 30, 40, 50, 60, 70};
System.out.println("Original: " + Arrays.toString(values));
// Copy indices 2-5 (exclusive)
int[] range = Arrays.copyOfRange(values, 2, 5);
System.out.println("Range [2,5): " + Arrays.toString(range));
// Copy from middle to end
int[] fromMiddle = Arrays.copyOfRange(values, 3, values.length);
System.out.println("From 3 to end: " + Arrays.toString(fromMiddle));
System.out.println("\nCopy strings:");
String[] fruits = {"apple", "banana", "cherry", "date"};
System.out.println("Original: " + Arrays.toString(fruits));
String[] fruitsCopy = Arrays.copyOf(fruits, fruits.length);
System.out.println("Copy: " + Arrays.toString(fruitsCopy));
fruitsCopy[0] = "apricot";
System.out.println("After change:");
System.out.println("Original: " + Arrays.toString(fruits));
System.out.println("Copy: " + Arrays.toString(fruitsCopy));
System.out.println("\nExtend array:");
int[] arr = {1, 2, 3};
System.out.println("Original: " + Arrays.toString(arr));
// Add element by extending
arr = Arrays.copyOf(arr, arr.length + 1);
arr[arr.length - 1] = 4;
System.out.println("Extended: " + Arrays.toString(arr));
System.out.println("\nTruncate array:");
int[] data = {10, 20, 30, 40, 50, 60};
System.out.println("Original: " + Arrays.toString(data));
data = Arrays.copyOf(data, 4);
System.out.println("Truncated: " + Arrays.toString(data));
System.out.println("\nCopy with padding:");
double[] prices = {9.99, 19.99, 29.99};
System.out.println("Original: " + Arrays.toString(prices));
double[] padded = Arrays.copyOf(prices, 6);
System.out.println("Padded: " + Arrays.toString(padded));
System.out.println("\nExtract subarray:");
int[] scores = {75, 82, 90, 68, 95, 88, 72};
System.out.println("All scores: " + Arrays.toString(scores));
// Get top 3 scores (assuming sorted)
Arrays.sort(scores);
int[] top3 = Arrays.copyOfRange(scores, scores.length - 3, scores.length);
System.out.println("Top 3: " + Arrays.toString(top3));
System.out.println("\nClone 2D array:");
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
System.out.println("Original matrix:");
for (int[] row : matrix) {
System.out.println(" " + Arrays.toString(row));
}
// Deep copy
int[][] matrixCopy = new int[matrix.length][];
for (int i = 0; i < matrix.length; i++) {
matrixCopy[i] = Arrays.copyOf(matrix[i], matrix[i].length);
}
matrixCopy[0][0] = 99;
System.out.println("After modifying copy:");
System.out.println("Original: " + Arrays.toString(matrix[0]));
System.out.println("Copy: " + Arrays.toString(matrixCopy[0]));
System.out.println("\nSystem.arraycopy:");
int[] src = {10, 20, 30, 40, 50};
int[] dest = new int[3];
System.arraycopy(src, 1, dest, 0, 3); // Copy 3 elements from index 1
System.out.println("Source: " + Arrays.toString(src));
System.out.println("Dest: " + Arrays.toString(dest));
}
}
Filling Arrays
Initialize arrays with default or specific values.
Fill.java
// Arrays.fill examples
import java.util.Arrays;
public class Fill {
public static void main(String[] args) {
System.out.println("Fill entire array:");
int[] nums = new int[10];
Arrays.fill(nums, 42);
System.out.println("Filled with 42: " + Arrays.toString(nums));
System.out.println("\nFill with zero:");
int[] data = {1, 2, 3, 4, 5};
System.out.println("Original: " + Arrays.toString(data));
Arrays.fill(data, 0);
System.out.println("Zeroed: " + Arrays.toString(data));
System.out.println("\nFill range:");
int[] values = new int[10];
Arrays.fill(values, 0, 3, 10); // Fill indices 0-2 with 10
Arrays.fill(values, 3, 7, 20); // Fill indices 3-6 with 20
Arrays.fill(values, 7, 10, 30); // Fill indices 7-9 with 30
System.out.println("Filled: " + Arrays.toString(values));
System.out.println("\nFill strings:");
String[] words = new String[5];
Arrays.fill(words, "hello");
System.out.println("Filled: " + Arrays.toString(words));
System.out.println("\nFill booleans:");
boolean[] flags = new boolean[8];
Arrays.fill(flags, true);
System.out.println("All true: " + Arrays.toString(flags));
Arrays.fill(flags, 2, 6, false);
System.out.println("Middle false: " + Arrays.toString(flags));
System.out.println("\nFill doubles:");
double[] prices = new double[5];
Arrays.fill(prices, 9.99);
System.out.println("Prices: " + Arrays.toString(prices));
System.out.println("\nInitialize grid:");
int[][] grid = new int[3][4];
for (int[] row : grid) {
Arrays.fill(row, -1);
}
System.out.println("Grid initialized to -1:");
for (int[] row : grid) {
System.out.println(" " + Arrays.toString(row));
}
System.out.println("\nFill sections:");
int[] sections = new int[12];
Arrays.fill(sections, 0, 4, 1);
Arrays.fill(sections, 4, 8, 2);
Arrays.fill(sections, 8, 12, 3);
System.out.println("Sections: " + Arrays.toString(sections));
System.out.println("\nReset array:");
int[] scores = {85, 92, 78, 95, 88};
System.out.println("Original scores: " + Arrays.toString(scores));
Arrays.fill(scores, 0);
System.out.println("Reset scores: " + Arrays.toString(scores));
System.out.println("\nMark positions:");
char[] board = new char[9];
Arrays.fill(board, '-');
System.out.println("Empty board: " + Arrays.toString(board));
board[0] = 'X';
board[4] = 'O';
board[8] = 'X';
System.out.println("After moves: " + Arrays.toString(board));
System.out.println("\nFill 2D array row-wise:");
int[][] matrix = new int[4][4];
for (int i = 0; i < matrix.length; i++) {
Arrays.fill(matrix[i], i + 1);
}
System.out.println("Matrix:");
for (int[] row : matrix) {
System.out.println(" " + Arrays.toString(row));
}
}
}
Comparing Arrays
Check if arrays have equal contents.
Equals.java
// Arrays.equals and related methods
import java.util.Arrays;
public class Equals {
public static void main(String[] args) {
System.out.println("Equals basics:");
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = {1, 2, 3, 4, 5};
int[] arr3 = {1, 2, 3, 4, 6};
System.out.println("arr1: " + Arrays.toString(arr1));
System.out.println("arr2: " + Arrays.toString(arr2));
System.out.println("arr3: " + Arrays.toString(arr3));
System.out.println("arr1.equals(arr2) [WRONG]: " + arr1.equals(arr2));
System.out.println("Arrays.equals(arr1, arr2): " + Arrays.equals(arr1, arr2));
System.out.println("Arrays.equals(arr1, arr3): " + Arrays.equals(arr1, arr3));
System.out.println("\nDifferent lengths:");
int[] short1 = {1, 2, 3};
int[] long1 = {1, 2, 3, 4, 5};
System.out.println("short: " + Arrays.toString(short1));
System.out.println("long: " + Arrays.toString(long1));
System.out.println("Equal? " + Arrays.equals(short1, long1));
System.out.println("\nString arrays:");
String[] words1 = {"hello", "world"};
String[] words2 = {"hello", "world"};
String[] words3 = {"Hello", "World"};
System.out.println("words1: " + Arrays.toString(words1));
System.out.println("words2: " + Arrays.toString(words2));
System.out.println("words3: " + Arrays.toString(words3));
System.out.println("words1 == words2: " + Arrays.equals(words1, words2));
System.out.println("words1 == words3: " + Arrays.equals(words1, words3));
System.out.println("\nNull handling:");
int[] notNull = {1, 2, 3};
int[] alsoNull = null;
System.out.println("Arrays.equals(null, null): " + Arrays.equals(alsoNull, alsoNull));
System.out.println("Arrays.equals(arr, null): " + Arrays.equals(notNull, alsoNull));
System.out.println("\nDeepEquals for 2D arrays:");
int[][] matrix1 = {{1, 2}, {3, 4}};
int[][] matrix2 = {{1, 2}, {3, 4}};
int[][] matrix3 = {{1, 2}, {3, 5}};
System.out.println("matrix1: " + Arrays.deepToString(matrix1));
System.out.println("matrix2: " + Arrays.deepToString(matrix2));
System.out.println("matrix3: " + Arrays.deepToString(matrix3));
System.out.println("Arrays.equals (WRONG): " + Arrays.equals(matrix1, matrix2));
System.out.println("Arrays.deepEquals: " + Arrays.deepEquals(matrix1, matrix2));
System.out.println("matrix1 vs matrix3: " + Arrays.deepEquals(matrix1, matrix3));
System.out.println("\nCompare (lexicographic):");
int[] nums1 = {1, 2, 3};
int[] nums2 = {1, 2, 4};
int[] nums3 = {1, 2, 3, 4};
System.out.println("nums1: " + Arrays.toString(nums1));
System.out.println("nums2: " + Arrays.toString(nums2));
System.out.println("nums3: " + Arrays.toString(nums3));
System.out.println("compare(nums1, nums2): " + Arrays.compare(nums1, nums2));
System.out.println("compare(nums2, nums1): " + Arrays.compare(nums2, nums1));
System.out.println("compare(nums1, nums3): " + Arrays.compare(nums1, nums3));
System.out.println("\nMismatch:");
int[] a = {1, 2, 3, 4, 5};
int[] b = {1, 2, 9, 4, 5};
int[] c = {1, 2, 3, 4, 5};
System.out.println("a: " + Arrays.toString(a));
System.out.println("b: " + Arrays.toString(b));
System.out.println("c: " + Arrays.toString(c));
System.out.println("mismatch(a, b): " + Arrays.mismatch(a, b));
System.out.println("mismatch(a, c): " + Arrays.mismatch(a, c));
System.out.println("\nHashCode:");
int[] hash1 = {1, 2, 3};
int[] hash2 = {1, 2, 3};
int[] hash3 = {3, 2, 1};
System.out.println("hash1: " + Arrays.hashCode(hash1));
System.out.println("hash2: " + Arrays.hashCode(hash2));
System.out.println("hash3: " + Arrays.hashCode(hash3));
System.out.println("Same hashCode? " + (Arrays.hashCode(hash1) == Arrays.hashCode(hash2)));
System.out.println("\nDeep hash:");
int[][] deep1 = {{1, 2}, {3, 4}};
int[][] deep2 = {{1, 2}, {3, 4}};
System.out.println("deepHashCode(deep1): " + Arrays.deepHashCode(deep1));
System.out.println("deepHashCode(deep2): " + Arrays.deepHashCode(deep2));
System.out.println("Same? " + (Arrays.deepHashCode(deep1) == Arrays.deepHashCode(deep2)));
System.out.println("\nToString:");
int[] display = {10, 20, 30};
System.out.println("toString: " + Arrays.toString(display));
System.out.println("Regular: " + display); // Object reference
System.out.println("\nDeep toString:");
int[][] matrix = {{1, 2, 3}, {4, 5, 6}};
System.out.println("toString: " + Arrays.toString(matrix));
System.out.println("deepToString: " + Arrays.deepToString(matrix));
}
}
@seealso collections_util
Deep equals
Use Arrays.deepEquals() for nested arrays or multidimensional arrays to compare contents recursively.
Exercise: Practical.java
Sort student grades and find the median score