All Downloads are FREE. Search and download functionalities are using the official Maven repository.

name.remal.ArrayUtils Maven / Gradle / Ivy

package name.remal;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import org.jetbrains.annotations.Contract;
import java.util.Arrays;
import java.lang.reflect.Array;
import java.util.Objects;
import static name.remal.UncheckedCast.uncheckedCast;
public class ArrayUtils {

    @Nonnull
    @Contract(pure = true)
    public static boolean[] concat(@Nonnull boolean[] array1, @Nonnull boolean[] array2) {
        if (0 == array1.length) return array2;
        if (0 == array2.length) return array1;
        boolean[] result = new boolean[array1.length + array2.length];
        System.arraycopy(array1, 0, result, 0, array1.length);
        System.arraycopy(array2, 0, result, array1.length, array2.length);
        return result;
    }

    @Nonnull
    @Contract(pure = true)
    public static boolean[] concat(@Nonnull boolean[] array, boolean value) {
        boolean[] result = new boolean[array.length + 1];
        System.arraycopy(array, 0, result, 0, array.length);
        result[array.length] = value;
        return result;
    }

    @Nonnull
    @Contract(pure = true)
    public static boolean[] concat(boolean value, @Nonnull boolean[] array) {
        boolean[] result = new boolean[1 + array.length];
        result[0] = value;
        System.arraycopy(array, 0, result, 1, array.length);
        return result;
    }

    @Nonnull
    @Contract(pure = true)
    public static byte[] concat(@Nonnull byte[] array1, @Nonnull byte[] array2) {
        if (0 == array1.length) return array2;
        if (0 == array2.length) return array1;
        byte[] result = new byte[array1.length + array2.length];
        System.arraycopy(array1, 0, result, 0, array1.length);
        System.arraycopy(array2, 0, result, array1.length, array2.length);
        return result;
    }

    @Nonnull
    @Contract(pure = true)
    public static byte[] concat(@Nonnull byte[] array, byte value) {
        byte[] result = new byte[array.length + 1];
        System.arraycopy(array, 0, result, 0, array.length);
        result[array.length] = value;
        return result;
    }

    @Nonnull
    @Contract(pure = true)
    public static byte[] concat(byte value, @Nonnull byte[] array) {
        byte[] result = new byte[1 + array.length];
        result[0] = value;
        System.arraycopy(array, 0, result, 1, array.length);
        return result;
    }

    @Nonnull
    @Contract(pure = true)
    public static char[] concat(@Nonnull char[] array1, @Nonnull char[] array2) {
        if (0 == array1.length) return array2;
        if (0 == array2.length) return array1;
        char[] result = new char[array1.length + array2.length];
        System.arraycopy(array1, 0, result, 0, array1.length);
        System.arraycopy(array2, 0, result, array1.length, array2.length);
        return result;
    }

    @Nonnull
    @Contract(pure = true)
    public static char[] concat(@Nonnull char[] array, char value) {
        char[] result = new char[array.length + 1];
        System.arraycopy(array, 0, result, 0, array.length);
        result[array.length] = value;
        return result;
    }

    @Nonnull
    @Contract(pure = true)
    public static char[] concat(char value, @Nonnull char[] array) {
        char[] result = new char[1 + array.length];
        result[0] = value;
        System.arraycopy(array, 0, result, 1, array.length);
        return result;
    }

    @Nonnull
    @Contract(pure = true)
    public static double[] concat(@Nonnull double[] array1, @Nonnull double[] array2) {
        if (0 == array1.length) return array2;
        if (0 == array2.length) return array1;
        double[] result = new double[array1.length + array2.length];
        System.arraycopy(array1, 0, result, 0, array1.length);
        System.arraycopy(array2, 0, result, array1.length, array2.length);
        return result;
    }

    @Nonnull
    @Contract(pure = true)
    public static double[] concat(@Nonnull double[] array, double value) {
        double[] result = new double[array.length + 1];
        System.arraycopy(array, 0, result, 0, array.length);
        result[array.length] = value;
        return result;
    }

    @Nonnull
    @Contract(pure = true)
    public static double[] concat(double value, @Nonnull double[] array) {
        double[] result = new double[1 + array.length];
        result[0] = value;
        System.arraycopy(array, 0, result, 1, array.length);
        return result;
    }

    @Nonnull
    @Contract(pure = true)
    public static float[] concat(@Nonnull float[] array1, @Nonnull float[] array2) {
        if (0 == array1.length) return array2;
        if (0 == array2.length) return array1;
        float[] result = new float[array1.length + array2.length];
        System.arraycopy(array1, 0, result, 0, array1.length);
        System.arraycopy(array2, 0, result, array1.length, array2.length);
        return result;
    }

    @Nonnull
    @Contract(pure = true)
    public static float[] concat(@Nonnull float[] array, float value) {
        float[] result = new float[array.length + 1];
        System.arraycopy(array, 0, result, 0, array.length);
        result[array.length] = value;
        return result;
    }

    @Nonnull
    @Contract(pure = true)
    public static float[] concat(float value, @Nonnull float[] array) {
        float[] result = new float[1 + array.length];
        result[0] = value;
        System.arraycopy(array, 0, result, 1, array.length);
        return result;
    }

    @Nonnull
    @Contract(pure = true)
    public static int[] concat(@Nonnull int[] array1, @Nonnull int[] array2) {
        if (0 == array1.length) return array2;
        if (0 == array2.length) return array1;
        int[] result = new int[array1.length + array2.length];
        System.arraycopy(array1, 0, result, 0, array1.length);
        System.arraycopy(array2, 0, result, array1.length, array2.length);
        return result;
    }

    @Nonnull
    @Contract(pure = true)
    public static int[] concat(@Nonnull int[] array, int value) {
        int[] result = new int[array.length + 1];
        System.arraycopy(array, 0, result, 0, array.length);
        result[array.length] = value;
        return result;
    }

    @Nonnull
    @Contract(pure = true)
    public static int[] concat(int value, @Nonnull int[] array) {
        int[] result = new int[1 + array.length];
        result[0] = value;
        System.arraycopy(array, 0, result, 1, array.length);
        return result;
    }

    @Nonnull
    @Contract(pure = true)
    public static long[] concat(@Nonnull long[] array1, @Nonnull long[] array2) {
        if (0 == array1.length) return array2;
        if (0 == array2.length) return array1;
        long[] result = new long[array1.length + array2.length];
        System.arraycopy(array1, 0, result, 0, array1.length);
        System.arraycopy(array2, 0, result, array1.length, array2.length);
        return result;
    }

    @Nonnull
    @Contract(pure = true)
    public static long[] concat(@Nonnull long[] array, long value) {
        long[] result = new long[array.length + 1];
        System.arraycopy(array, 0, result, 0, array.length);
        result[array.length] = value;
        return result;
    }

    @Nonnull
    @Contract(pure = true)
    public static long[] concat(long value, @Nonnull long[] array) {
        long[] result = new long[1 + array.length];
        result[0] = value;
        System.arraycopy(array, 0, result, 1, array.length);
        return result;
    }

    @Nonnull
    @Contract(pure = true)
    public static short[] concat(@Nonnull short[] array1, @Nonnull short[] array2) {
        if (0 == array1.length) return array2;
        if (0 == array2.length) return array1;
        short[] result = new short[array1.length + array2.length];
        System.arraycopy(array1, 0, result, 0, array1.length);
        System.arraycopy(array2, 0, result, array1.length, array2.length);
        return result;
    }

    @Nonnull
    @Contract(pure = true)
    public static short[] concat(@Nonnull short[] array, short value) {
        short[] result = new short[array.length + 1];
        System.arraycopy(array, 0, result, 0, array.length);
        result[array.length] = value;
        return result;
    }

    @Nonnull
    @Contract(pure = true)
    public static short[] concat(short value, @Nonnull short[] array) {
        short[] result = new short[1 + array.length];
        result[0] = value;
        System.arraycopy(array, 0, result, 1, array.length);
        return result;
    }

    @Nonnull
    @Contract(pure = true)
    public static  T[] concat(@Nonnull T[] array1, @Nonnull T[] array2) {
        Class type = array1.getClass().getComponentType();
        Class otherType = array2.getClass().getComponentType();
        if (!Objects.equals(type, otherType)) throw new IllegalArgumentException("Array of " + type + " can't be concatenated with array of " + otherType);
        if (0 == array1.length) return array2;
        if (0 == array2.length) return array1;
        T[] result = uncheckedCast(Array.newInstance(type, array1.length + array2.length));
        System.arraycopy(array1, 0, result, 0, array1.length);
        System.arraycopy(array2, 0, result, array1.length, array2.length);
        return result;
    }

    @Nonnull
    @Contract(pure = true)
    public static  T[] concat(@Nonnull T[] array, T value) {
        Class type = array.getClass().getComponentType();
        if (null != value && !type.isInstance(value)) throw new IllegalArgumentException("Array of " + type + " can't be concatenated with value of type " + value.getClass());
        T[] result = uncheckedCast(Array.newInstance(type, array.length + 1));
        System.arraycopy(array, 0, result, 0, array.length);
        result[array.length] = value;
        return result;
    }

    @Nonnull
    @Contract(pure = true)
    public static  T[] concat(T value, @Nonnull T[] array) {
        Class type = array.getClass().getComponentType();
        if (null != value && !type.isInstance(value)) throw new IllegalArgumentException("Value of type " + value.getClass() + " can't be concatenated with array of " + type);
        T[] result = uncheckedCast(Array.newInstance(type, 1 + array.length));
        result[0] = value;
        System.arraycopy(array, 0, result, 1, array.length);
        return result;
    }

    @Contract(pure = true)
    public static int indexOf(@Nonnull boolean[] array, boolean value) {
        for (int i = 0; i < array.length; ++i) {
            if (value == array[i]) return i;
        }
        return -1;
    }

    @Contract(pure = true)
    public static boolean contains(@Nonnull boolean[] array, boolean value) {
        return 0 <= indexOf(array, value);
    }

    @Contract(pure = true)
    public static int indexOf(@Nonnull byte[] array, byte value) {
        for (int i = 0; i < array.length; ++i) {
            if (value == array[i]) return i;
        }
        return -1;
    }

    @Contract(pure = true)
    public static boolean contains(@Nonnull byte[] array, byte value) {
        return 0 <= indexOf(array, value);
    }

    @Contract(pure = true)
    public static int indexOf(@Nonnull char[] array, char value) {
        for (int i = 0; i < array.length; ++i) {
            if (value == array[i]) return i;
        }
        return -1;
    }

    @Contract(pure = true)
    public static boolean contains(@Nonnull char[] array, char value) {
        return 0 <= indexOf(array, value);
    }

    @Contract(pure = true)
    public static int indexOf(@Nonnull double[] array, double value) {
        for (int i = 0; i < array.length; ++i) {
            if (value == array[i]) return i;
        }
        return -1;
    }

    @Contract(pure = true)
    public static boolean contains(@Nonnull double[] array, double value) {
        return 0 <= indexOf(array, value);
    }

    @Contract(pure = true)
    public static int indexOf(@Nonnull float[] array, float value) {
        for (int i = 0; i < array.length; ++i) {
            if (value == array[i]) return i;
        }
        return -1;
    }

    @Contract(pure = true)
    public static boolean contains(@Nonnull float[] array, float value) {
        return 0 <= indexOf(array, value);
    }

    @Contract(pure = true)
    public static int indexOf(@Nonnull int[] array, int value) {
        for (int i = 0; i < array.length; ++i) {
            if (value == array[i]) return i;
        }
        return -1;
    }

    @Contract(pure = true)
    public static boolean contains(@Nonnull int[] array, int value) {
        return 0 <= indexOf(array, value);
    }

    @Contract(pure = true)
    public static int indexOf(@Nonnull long[] array, long value) {
        for (int i = 0; i < array.length; ++i) {
            if (value == array[i]) return i;
        }
        return -1;
    }

    @Contract(pure = true)
    public static boolean contains(@Nonnull long[] array, long value) {
        return 0 <= indexOf(array, value);
    }

    @Contract(pure = true)
    public static int indexOf(@Nonnull short[] array, short value) {
        for (int i = 0; i < array.length; ++i) {
            if (value == array[i]) return i;
        }
        return -1;
    }

    @Contract(pure = true)
    public static boolean contains(@Nonnull short[] array, short value) {
        return 0 <= indexOf(array, value);
    }

    @Contract(pure = true)
    public static int indexOf(@Nonnull Object[] array, @Nullable Object value) {
        for (int i = 0; i < array.length; ++i) {
            if (arrayEquals(value, array[i])) return i;
        }
        return -1;
    }

    @Contract(pure = true)
    public static boolean contains(@Nonnull Object[] array, @Nullable Object value) {
        return 0 <= indexOf(array, value);
    }

    @Contract(value = "null,null->true; null,!null->false; !null,null->false", pure = true)
    public static boolean arrayEquals(@Nullable boolean[] array1, @Nullable boolean[] array2) {
        if (array1 == array2) return true;
        if (null == array1 || null == array2) return false;
        return Arrays.equals(array1, array2);
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable boolean[] array1, @Nullable byte[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable boolean[] array1, @Nullable char[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable boolean[] array1, @Nullable double[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable boolean[] array1, @Nullable float[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable boolean[] array1, @Nullable int[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable boolean[] array1, @Nullable long[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable boolean[] array1, @Nullable short[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable byte[] array1, @Nullable boolean[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; null,!null->false; !null,null->false", pure = true)
    public static boolean arrayEquals(@Nullable byte[] array1, @Nullable byte[] array2) {
        if (array1 == array2) return true;
        if (null == array1 || null == array2) return false;
        return Arrays.equals(array1, array2);
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable byte[] array1, @Nullable char[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable byte[] array1, @Nullable double[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable byte[] array1, @Nullable float[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable byte[] array1, @Nullable int[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable byte[] array1, @Nullable long[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable byte[] array1, @Nullable short[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable char[] array1, @Nullable boolean[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable char[] array1, @Nullable byte[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; null,!null->false; !null,null->false", pure = true)
    public static boolean arrayEquals(@Nullable char[] array1, @Nullable char[] array2) {
        if (array1 == array2) return true;
        if (null == array1 || null == array2) return false;
        return Arrays.equals(array1, array2);
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable char[] array1, @Nullable double[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable char[] array1, @Nullable float[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable char[] array1, @Nullable int[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable char[] array1, @Nullable long[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable char[] array1, @Nullable short[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable double[] array1, @Nullable boolean[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable double[] array1, @Nullable byte[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable double[] array1, @Nullable char[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; null,!null->false; !null,null->false", pure = true)
    public static boolean arrayEquals(@Nullable double[] array1, @Nullable double[] array2) {
        if (array1 == array2) return true;
        if (null == array1 || null == array2) return false;
        return Arrays.equals(array1, array2);
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable double[] array1, @Nullable float[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable double[] array1, @Nullable int[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable double[] array1, @Nullable long[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable double[] array1, @Nullable short[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable float[] array1, @Nullable boolean[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable float[] array1, @Nullable byte[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable float[] array1, @Nullable char[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable float[] array1, @Nullable double[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; null,!null->false; !null,null->false", pure = true)
    public static boolean arrayEquals(@Nullable float[] array1, @Nullable float[] array2) {
        if (array1 == array2) return true;
        if (null == array1 || null == array2) return false;
        return Arrays.equals(array1, array2);
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable float[] array1, @Nullable int[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable float[] array1, @Nullable long[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable float[] array1, @Nullable short[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable int[] array1, @Nullable boolean[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable int[] array1, @Nullable byte[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable int[] array1, @Nullable char[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable int[] array1, @Nullable double[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable int[] array1, @Nullable float[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; null,!null->false; !null,null->false", pure = true)
    public static boolean arrayEquals(@Nullable int[] array1, @Nullable int[] array2) {
        if (array1 == array2) return true;
        if (null == array1 || null == array2) return false;
        return Arrays.equals(array1, array2);
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable int[] array1, @Nullable long[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable int[] array1, @Nullable short[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable long[] array1, @Nullable boolean[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable long[] array1, @Nullable byte[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable long[] array1, @Nullable char[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable long[] array1, @Nullable double[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable long[] array1, @Nullable float[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable long[] array1, @Nullable int[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; null,!null->false; !null,null->false", pure = true)
    public static boolean arrayEquals(@Nullable long[] array1, @Nullable long[] array2) {
        if (array1 == array2) return true;
        if (null == array1 || null == array2) return false;
        return Arrays.equals(array1, array2);
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable long[] array1, @Nullable short[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable short[] array1, @Nullable boolean[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable short[] array1, @Nullable byte[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable short[] array1, @Nullable char[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable short[] array1, @Nullable double[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable short[] array1, @Nullable float[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable short[] array1, @Nullable int[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; _,!null->false; !null,_->false", pure = true)
    public static boolean arrayEquals(@Nullable short[] array1, @Nullable long[] array2) {
        return null == array1 && null == array2;
    }

    @Contract(value = "null,null->true; null,!null->false; !null,null->false", pure = true)
    public static boolean arrayEquals(@Nullable short[] array1, @Nullable short[] array2) {
        if (array1 == array2) return true;
        if (null == array1 || null == array2) return false;
        return Arrays.equals(array1, array2);
    }

    @Contract(value = "null,null->true; null,!null->false; !null,null->false", pure = true)
    public static boolean arrayEquals(@Nullable Object[] array1, @Nullable Object[] array2) {
        if (array1 == array2) return true;
        if (null == array1 || null == array2) return false;
        return Arrays.deepEquals(array1, array2);
    }

    @Contract(value = "null,null->true; null,!null->false; !null,null->false", pure = true)
    public static boolean arrayEquals(@Nullable Object array1, @Nullable Object array2) {
        if (array1 == array2) return true;
        if (null == array1 || null == array2) return false;
        if (array1 instanceof boolean[] && array2 instanceof boolean[]) return Arrays.equals((boolean[]) array1, (boolean[]) array2);
        if (array1 instanceof byte[] && array2 instanceof byte[]) return Arrays.equals((byte[]) array1, (byte[]) array2);
        if (array1 instanceof char[] && array2 instanceof char[]) return Arrays.equals((char[]) array1, (char[]) array2);
        if (array1 instanceof double[] && array2 instanceof double[]) return Arrays.equals((double[]) array1, (double[]) array2);
        if (array1 instanceof float[] && array2 instanceof float[]) return Arrays.equals((float[]) array1, (float[]) array2);
        if (array1 instanceof int[] && array2 instanceof int[]) return Arrays.equals((int[]) array1, (int[]) array2);
        if (array1 instanceof long[] && array2 instanceof long[]) return Arrays.equals((long[]) array1, (long[]) array2);
        if (array1 instanceof short[] && array2 instanceof short[]) return Arrays.equals((short[]) array1, (short[]) array2);
        if (array1 instanceof Object[] && array2 instanceof Object[]) return Arrays.deepEquals((Object[]) array1, (Object[]) array2);
        return array1.equals(array2);
    }

    @Contract(pure = true)
    public static int arrayHashCode(@Nullable boolean[] array) {
        if (null == array) return 0;
        return Arrays.hashCode(array);
    }

    @Contract(pure = true)
    public static int arrayHashCode(@Nullable byte[] array) {
        if (null == array) return 0;
        return Arrays.hashCode(array);
    }

    @Contract(pure = true)
    public static int arrayHashCode(@Nullable char[] array) {
        if (null == array) return 0;
        return Arrays.hashCode(array);
    }

    @Contract(pure = true)
    public static int arrayHashCode(@Nullable double[] array) {
        if (null == array) return 0;
        return Arrays.hashCode(array);
    }

    @Contract(pure = true)
    public static int arrayHashCode(@Nullable float[] array) {
        if (null == array) return 0;
        return Arrays.hashCode(array);
    }

    @Contract(pure = true)
    public static int arrayHashCode(@Nullable int[] array) {
        if (null == array) return 0;
        return Arrays.hashCode(array);
    }

    @Contract(pure = true)
    public static int arrayHashCode(@Nullable long[] array) {
        if (null == array) return 0;
        return Arrays.hashCode(array);
    }

    @Contract(pure = true)
    public static int arrayHashCode(@Nullable short[] array) {
        if (null == array) return 0;
        return Arrays.hashCode(array);
    }

    @Contract(pure = true)
    public static int arrayHashCode(@Nullable Object[] array) {
        if (null == array) return 0;
        return Arrays.deepHashCode(array);
    }

    @Contract(pure = true)
    public static int arrayHashCode(@Nullable Object array) {
        if (null == array) return 0;
        if (array instanceof boolean[]) return Arrays.hashCode((boolean[]) array);
        if (array instanceof byte[]) return Arrays.hashCode((byte[]) array);
        if (array instanceof char[]) return Arrays.hashCode((char[]) array);
        if (array instanceof double[]) return Arrays.hashCode((double[]) array);
        if (array instanceof float[]) return Arrays.hashCode((float[]) array);
        if (array instanceof int[]) return Arrays.hashCode((int[]) array);
        if (array instanceof long[]) return Arrays.hashCode((long[]) array);
        if (array instanceof short[]) return Arrays.hashCode((short[]) array);
        if (array instanceof Object[]) return Arrays.deepHashCode((Object[]) array);
        return array.hashCode();
    }


    @Nonnull
    @Contract(pure = true)
    public static String arrayToString(@Nullable boolean[] array) {
        if (null == array) return "null";
        return Arrays.toString(array);
    }

    @Nonnull
    @Contract(pure = true)
    public static String arrayToString(@Nullable byte[] array) {
        if (null == array) return "null";
        return Arrays.toString(array);
    }

    @Nonnull
    @Contract(pure = true)
    public static String arrayToString(@Nullable char[] array) {
        if (null == array) return "null";
        return Arrays.toString(array);
    }

    @Nonnull
    @Contract(pure = true)
    public static String arrayToString(@Nullable double[] array) {
        if (null == array) return "null";
        return Arrays.toString(array);
    }

    @Nonnull
    @Contract(pure = true)
    public static String arrayToString(@Nullable float[] array) {
        if (null == array) return "null";
        return Arrays.toString(array);
    }

    @Nonnull
    @Contract(pure = true)
    public static String arrayToString(@Nullable int[] array) {
        if (null == array) return "null";
        return Arrays.toString(array);
    }

    @Nonnull
    @Contract(pure = true)
    public static String arrayToString(@Nullable long[] array) {
        if (null == array) return "null";
        return Arrays.toString(array);
    }

    @Nonnull
    @Contract(pure = true)
    public static String arrayToString(@Nullable short[] array) {
        if (null == array) return "null";
        return Arrays.toString(array);
    }

    @Nonnull
    @Contract(pure = true)
    public static String arrayToString(@Nullable Object[] array) {
        if (null == array) return "null";
        return Arrays.deepToString(array);
    }

    @Nonnull
    @Contract(pure = true)
    public static String arrayToString(@Nullable Object array) {
        if (null == array) return "null";
        if (array instanceof boolean[]) return Arrays.toString((boolean[]) array);
        if (array instanceof byte[]) return Arrays.toString((byte[]) array);
        if (array instanceof char[]) return Arrays.toString((char[]) array);
        if (array instanceof double[]) return Arrays.toString((double[]) array);
        if (array instanceof float[]) return Arrays.toString((float[]) array);
        if (array instanceof int[]) return Arrays.toString((int[]) array);
        if (array instanceof long[]) return Arrays.toString((long[]) array);
        if (array instanceof short[]) return Arrays.toString((short[]) array);
        if (array instanceof Object[]) return Arrays.deepToString((Object[]) array);
        return array.toString();
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy