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