java数组操作工具类

package com.zuidaima.util.common;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;

/**
 * 数组操作辅助类,支持int,char,boject,String类型
 *@author www.zuidaima.com
 */
public class ArrayHelper {

    /**
     * 锁定创建
     */
    private ArrayHelper() {
    }
    /**
     *
     * 计算数组中的单元数目或对象中的属性个数
     * 当 arr 为 null 时返回 0。
     *
     * @param arr
     * @return
     */
    public static int sizeOf(int[] arr) {
        return arr == null ? 0 : arr.length;
    }

    /**
     *
     * 合并一个或多个数组
     * 当 arr 为 null 时返回 new int[0] 。
     *
     * @param arrs
     * @return
     */
    public static int[] merge(int[]... arrs) {
        int[] result = new int[0];
        if (arrs != null) {
            int count = 0;
            for (int i = 0; i < arrs.length; i++) {
                count += arrs[i].length;
            }
            result = new int[count];
            int arg;
            int k = 0;
            for (int i = 0; i < arrs.length; i++) {
                if (arrs[i] == null) {
                    continue;
                }
                for (int j = 0; j < arrs[i].length; j++) {
                    arg = arrs[i][j];
                    result[k] = arg;
                    k++;
                }
            }
        }
        return result;
    }

    /**
     *
     * 计算数组的差集
     * 注意:
     *     aArr 为null时 返回 bArr(可能为 null)。
     *     bArr 为null时 返回 aArr。
     *     无差集时返回 new int[0];
     *
     * @param aArr
     * @param bArr
     * @return
     */
    public static int[] diff(int[] aArr, int[] bArr) {
        {
            if (aArr == null) {
                return bArr;
            }
            if (bArr == null) {
                return aArr;
            }
        }
        int[] cArr = new int[aArr.length + bArr.length];
        int idx = 0;
        /**
         * 检查 a 中那些元 在 b 中不存在
         */
        for (int i = 0; i < aArr.length; i++) {
            if (!inArray(bArr, aArr[i])) {
                cArr[idx++] = aArr[i];
            }
        }
        /**
         * 检查 b 中那些元 在 a 中不存在
         */
        for (int i = 0; i < bArr.length; i++) {
            if (!inArray(aArr, bArr[i])) {
                cArr[idx++] = bArr[i];
            }
        }
        //
        int[] dArr = new int[idx];
        System.arraycopy(cArr, 0, dArr, 0, dArr.length);
        return dArr;
    }

    /**
     *
     * 返回一个数组的全复制
     * 当 arr 为 null 时返回 new int[0]  。
     *
     * @param arr
     * @return
     */
    public static int[] copyOf(int[] arr) {
        int[] carr = new int[0];
        if (arr != null) {
            carr = new int[arr.length];
            System.arraycopy(arr, 0, carr, 0, arr.length);
        }
        return carr;
    }

    /**
     *
     * 返回一个数组的复制
     * 当 arr 为 null 时返回 new int[0] 。
     *
     * @param arr
     * @param i
     * @return
     */
    public static int[] copyOf(int[] arr, int i) {
        int[] carr = new int[0];
        if (arr != null) {
            if (i > arr.length) {
                i = arr.length;
            }
            carr = new int[i];
            System.arraycopy(arr, 0, carr, 0, i);
        }
        return carr;
    }

    /**
     *
     * 创建一个Map,用一个数组的值作为其键名,另一个数组的值作为其值
     * 当键为空或无单元时返回空Map,否则以键数组为主导填充Map。值不足时填充null。
     * 注意:Map中键顺序并不一定与参数keys顺序相同。
     * @param <T>
     * @param <V>
     * @param keys
     * @param values
     * @return
     */
    public static <T, V> Map<T, V> combine(T[] keys, V[] values) {
        Map<T, V> map = new HashMap<T, V>();
        if (keys != null && keys.length > 0) {
            int vsize = values == null ? 0 : values.length;
            for (int i = 0; i < keys.length; i++) {
                if (i >= vsize) {
                    map.put(keys[i], null);
                } else {
                    map.put(keys[i], values[i]);
                }
            }
        }
        return map;
    }

    /**
     *
     * 从数组中随机取出一个或多个单元
     * 当 arr 为 null 时返回 new int[0]。
     *
     * @param arr
     * @return
     */
    public static int[] random(int[] arr) {
        if (arr == null) {
            return new int[0];
        }
        int count = new Random().nextInt(arr.length);
        count = count > 0 ? count : 1;
        return random(arr, count);
    }

    /**
     *
     * 将数组打乱
     * 当 arr 为 null 时返回 new int[0]。
     *
     * @param arr
     * @return
     */
    public static int[] shuffle(int[] arr) {
        if (arr == null) {
            return new int[0];
        }
        return random(arr, arr.length);
    }

    /**
     *
     * 随机取出固定数量的元素
     * 如取出数量大于数组元素数则返回打乱的数组,等同于 {@link #shuffle}
     * 当 arr 为 null 时返回 new int[0]。
     *
     * @param arr
     * @param count
     * @return
     */
    public static int[] random(int[] arr, int count) {
        int[] rarr = new int[0];
        if (arr != null) {
            if (arr.length < count) {
                count = arr.length;
            }
            Random random = new Random();
            int i = 0;
            int num = 0;
            rarr = new int[count];
            int[] keys = new int[count];
            for (int j = 0; j < keys.length; j++) {
                keys[j] = -1;
            }
            do {
                num = random.nextInt(arr.length);
                if (!inArray(keys, num)) {
                    keys[i] = num;
                    rarr[i] = arr[num];
                    i++;
                }
            } while (i < count);
        }
        return rarr;
    }

    /**
     *
     * 检查数组中是否存在某个值
     *
     * @param arr
     * @param search
     * @return
     */
    public static boolean inArray(int[] arr, int search) {
        if (arr != null) {
            for (int i = 0; i < arr.length; i++) {
                if (arr[i] == search) {
                    return true;
                }
            }
        }
        return false;
    }

    /**
     *
     * 检查数组中是否存在某几个值
     *
     * @param arr
     * @param search
     * @return
     */
    public static boolean inArray(int[] arr, int[] search) {
        if (search != null) {
            for (int i = 0; i < search.length; i++) {
                if (!inArray(arr, search[i])) {
                    return false;
                }
            }
            return true;
        }
        return false;
    }

    /**
     *
     * 检查数组中是否存在某个值,并返回其索引键,不存在则返回 -1 。
     *
     * @param arr
     * @param search
     * @return
     */
    public static int search(int[] arr, int search) {
        if (arr != null) {
            for (int i = 0; i < arr.length; i++) {
                if (arr[i] == search) {
                    return i;
                }
            }
        }
        return -1;
    }

    /**
     *
     * 返回一个单元顺序相反的数组
     * 当 arr 为 null 时返回 new int[0]。
     *
     * @param arr
     * @return
     */
    public static int[] reverse(int[] arr) {
        int[] rarr = new int[0];
        if (arr != null) {
            rarr = new int[arr.length];
            int j = 0;
            for (int i = arr.length - 1; i >= 0; i--) {
                rarr[j++] = arr[i];
            }
        }
        return rarr;
    }

    /**
     * 使用间隔符连接
     * @param ints
     * @param sep
     * @return
     */
    public static String join(int[] ints, String sep) {
        StringBuilder strBuilder = new StringBuilder();
        if (ints != null) {
            for (int i = 0; i < ints.length; i++) {
                strBuilder.append(ints[i]);
                if (i < ints.length - 1) {
                    strBuilder.append(sep);
                }
            }
        }
        return strBuilder.toString();
    }

    /**
     * 计算所有单元的合
     * @param ints
     * @param sep
     * @return
     */
    public static int sum(int[] ints) {
        int sum = 0;
        if (ints != null) {
            for (int i = 0; i < ints.length; i++) {
                sum += ints[i];
            }
        }
        return sum;
    }

    /**
     * char array tools
     * =====================
     */
    /**
     *
     * 计算数组中的单元数目或对象中的属性个数
     * 当 arr 为 null 时返回 0。
     *
     * @param arr
     * @return
     */
    public static int sizeOf(char[] arr) {
        return arr == null ? 0 : arr.length;
    }

    /**
     *
     * 合并一个或多个数组
     * 当 arr 为 null 时返回 new char[0] 。
     *
     * @param arrs
     * @return
     */
    public static char[] merge(char[]... arrs) {
        char[] result = new char[0];
        if (arrs != null) {
            char count = 0;
            for (char i = 0; i < arrs.length; i++) {
                count += arrs[i].length;
            }
            result = new char[count];
            char arg;
            char k = 0;
            for (char i = 0; i < arrs.length; i++) {
                if (arrs[i] == null) {
                    continue;
                }
                for (char j = 0; j < arrs[i].length; j++) {
                    arg = arrs[i][j];
                    result[k] = arg;
                    k++;
                }
            }
        }
        return result;
    }

    /**
     *
     * 计算数组的差集
     * 注意:
     *     aArr 为null时 返回 bArr(可能为 null)。
     *     bArr 为null时 返回 aArr。
     *     无差集时返回 new char[0];
     *
     * @param aArr
     * @param bArr
     * @return
     */
    public static char[] diff(char[] aArr, char[] bArr) {
        {
            if (aArr == null) {
                return bArr;
            }
            if (bArr == null) {
                return aArr;
            }
        }
        char[] cArr = new char[aArr.length + bArr.length];
        char idx = 0;
        /**
         * 检查 a 中那些元 在 b 中不存在
         */
        for (int i = 0; i < aArr.length; i++) {
            if (!inArray(bArr, aArr[i])) {
                cArr[idx++] = aArr[i];
            }
        }
        /**
         * 检查 b 中那些元 在 a 中不存在
         */
        for (int i = 0; i < bArr.length; i++) {
            if (!inArray(aArr, bArr[i])) {
                cArr[idx++] = bArr[i];
            }
        }
        //
        char[] dArr = new char[idx];
        System.arraycopy(cArr, 0, dArr, 0, dArr.length);
        return dArr;
    }

    /**
     *
     * 返回一个数组的全复制
     * 当 arr 为 null 时返回 new char[0]  。
     *
     * @param arr
     * @return
     */
    public static char[] copyOf(char[] arr) {
        char[] carr = new char[0];
        if (arr != null) {
            carr = new char[arr.length];
            System.arraycopy(arr, 0, carr, 0, arr.length);
        }
        return carr;
    }

    /**
     *
     * 返回一个数组的复制
     * 当 arr 为 null 时返回 new char[0] 。
     *
     * @param arr
     * @param i
     * @return
     */
    public static char[] copyOf(char[] arr, int i) {
        char[] carr = new char[0];
        if (arr != null) {
            if (i > arr.length) {
                i = arr.length;
            }
            carr = new char[i];
            System.arraycopy(arr, 0, carr, 0, i);
        }
        return carr;
    }

    /**
     *
     * 从数组中随机取出一个或多个单元
     * 当 arr 为 null 时返回 new char[0]。
     *
     * @param arr
     * @return
     */
    public static char[] random(char[] arr) {
        if (arr == null) {
            return new char[0];
        }
        int count = new Random().nextInt(arr.length);
        count = count > 0 ? count : 1;
        return random(arr, count);
    }

    /**
     *
     * 将数组打乱
     * 当 arr 为 null 时返回 new char[0]。
     *
     * @param arr
     * @return
     */
    public static char[] shuffle(char[] arr) {
        if (arr == null) {
            return new char[0];
        }
        return random(arr, arr.length);
    }

    /**
     *
     * 随机取出固定数量的元素
     * 如取出数量大于数组元素数则返回打乱的数组,等同于 {@link #shuffle}
     * 当 arr 为 null 时返回 new char[0]。
     *
     * @param arr
     * @param count
     * @return
     */
    public static char[] random(char[] arr, int count) {
        char[] rarr = new char[0];
        if (arr != null) {
            if (arr.length < count) {
                count = arr.length;
            }
            Random random = new Random();
            int i = 0;
            int num = 0;
            rarr = new char[count];
            int[] keys = new int[count];
            for (int j = 0; j < keys.length; j++) {
                keys[j] = 0;
            }
            do {
                num = random.nextInt(arr.length);
                if (!inArray(keys, num)) {
                    keys[i] = num;
                    rarr[i] = arr[num];
                    i++;
                }
            } while (i < count);
        }
        return rarr;
    }

    /**
     *
     * 检查数组中是否存在某个值
     *
     * @param arr
     * @param search
     * @return
     */
    public static boolean inArray(char[] arr, char search) {
        if (arr != null) {
            for (int i = 0; i < arr.length; i++) {
                if (arr[i] == search) {
                    return true;
                }
            }
        }
        return false;
    }

    /**
     *
     * 检查数组中是否存在某几个值
     *
     * @param arr
     * @param search
     * @return
     */
    public static boolean inArray(char[] arr, char[] search) {
        if (search != null) {
            for (int i = 0; i < search.length; i++) {
                if (!inArray(arr, search[i])) {
                    return false;
                }
            }
            return true;
        }
        return false;
    }

    /**
     *
     * 检查数组中是否存在某个值,并返回其索引键,不存在则返回 -1 。
     *
     * @param arr
     * @param search
     * @return
     */
    public static int search(char[] arr, char search) {
        if (arr != null) {
            for (char i = 0; i < arr.length; i++) {
                if (arr[i] == search) {
                    return i;
                }
            }
        }
        return -1;
    }

    /**
     *
     * 返回一个单元顺序相反的数组
     * 当 arr 为 null 时返回 new char[0]。
     *
     * @param arr
     * @return
     */
    public static char[] reverse(char[] arr) {
        char[] rarr = new char[0];
        if (arr != null) {
            rarr = new char[arr.length];
            char j = 0;
            for (int i = arr.length - 1; i >= 0; i--) {
                rarr[j++] = arr[i];
            }
        }
        return rarr;
    }

    /**
     * byte array tools
     * =====================
     */
    /**
     *
     * 计算数组中的单元数目或对象中的属性个数
     * 当 arr 为 null 时返回 0。
     *
     * @param arr
     * @return
     */
    public static int sizeOf(byte[] arr) {
        return arr == null ? 0 : arr.length;
    }

    /**
     *
     * 合并一个或多个数组
     * 当 arr 为 null 时返回 new byte[0] 。
     *
     * @param arrs
     * @return
     */
    public static byte[] merge(byte[]... arrs) {
        byte[] result = new byte[0];
        if (arrs != null) {
            byte count = 0;
            for (byte i = 0; i < arrs.length; i++) {
                count += arrs[i].length;
            }
            result = new byte[count];
            byte arg;
            byte k = 0;
            for (byte i = 0; i < arrs.length; i++) {
                if (arrs[i] == null) {
                    continue;
                }
                for (byte j = 0; j < arrs[i].length; j++) {
                    arg = arrs[i][j];
                    result[k] = arg;
                    k++;
                }
            }
        }
        return result;
    }

    /**
     *
     * 计算数组的差集
     * 注意:
     *     aArr 为null时 返回 bArr(可能为 null)。
     *     bArr 为null时 返回 aArr。
     *     无差集时返回 new byte[0];
     *
     * @param aArr
     * @param bArr
     * @return
     */
    public static byte[] diff(byte[] aArr, byte[] bArr) {
        {
            if (aArr == null) {
                return bArr;
            }
            if (bArr == null) {
                return aArr;
            }
        }
        byte[] cArr = new byte[aArr.length + bArr.length];
        byte idx = 0;
        /**
         * 检查 a 中那些元 在 b 中不存在
         */
        for (int i = 0; i < aArr.length; i++) {
            if (!inArray(bArr, aArr[i])) {
                cArr[idx++] = aArr[i];
            }
        }
        /**
         * 检查 b 中那些元 在 a 中不存在
         */
        for (int i = 0; i < bArr.length; i++) {
            if (!inArray(aArr, bArr[i])) {
                cArr[idx++] = bArr[i];
            }
        }
        //
        byte[] dArr = new byte[idx];
        System.arraycopy(cArr, 0, dArr, 0, dArr.length);
        return dArr;
    }

    /**
     *
     * 返回一个数组的全复制
     * 当 arr 为 null 时返回 new byte[0]  。
     *
     * @param arr
     * @return
     */
    public static byte[] copyOf(byte[] arr) {
        byte[] carr = new byte[0];
        if (arr != null) {
            carr = new byte[arr.length];
            System.arraycopy(arr, 0, carr, 0, arr.length);
        }
        return carr;
    }

    /**
     *
     * 返回一个数组的复制
     * 当 arr 为 null 时返回 new byte[0] 。
     *
     * @param arr
     * @param i
     * @return
     */
    public static byte[] copyOf(byte[] arr, int i) {
        byte[] carr = new byte[0];
        if (arr != null) {
            if (i > arr.length) {
                i = arr.length;
            }
            carr = new byte[i];
            System.arraycopy(arr, 0, carr, 0, i);
        }
        return carr;
    }

    /**
     *
     * 从数组中随机取出一个或多个单元
     * 当 arr 为 null 时返回 new byte[0]。
     *
     * @param arr
     * @return
     */
    public static byte[] random(byte[] arr) {
        if (arr == null) {
            return new byte[0];
        }
        int count = new Random().nextInt(arr.length);
        count = count > 0 ? count : 1;
        return random(arr, count);
    }

    /**
     *
     * 将数组打乱
     * 当 arr 为 null 时返回 new byte[0]。
     *
     * @param arr
     * @return
     */
    public static byte[] shuffle(byte[] arr) {
        if (arr == null) {
            return new byte[0];
        }
        return random(arr, arr.length);
    }

    /**
     *
     * 随机取出固定数量的元素
     * 如取出数量大于数组元素数则返回打乱的数组,等同于 {@link #shuffle}
     * 当 arr 为 null 时返回 new byte[0]。
     *
     * @param arr
     * @param count
     * @return
     */
    public static byte[] random(byte[] arr, int count) {
        byte[] rarr = new byte[0];
        if (arr != null) {
            if (arr.length < count) {
                count = arr.length;
            }
            Random random = new Random();
            int i = 0;
            int num = 0;
            rarr = new byte[count];
            int[] keys = new int[count];
            for (int j = 0; j < keys.length; j++) {
                keys[j] = 0;
            }
            do {
                num = random.nextInt(arr.length);
                if (!inArray(keys, num)) {
                    keys[i] = num;
                    rarr[i] = arr[num];
                    i++;
                }
            } while (i < count);
        }
        return rarr;
    }

    /**
     *
     * 检查数组中是否存在某个值
     *
     * @param arr
     * @param search
     * @return
     */
    public static boolean inArray(byte[] arr, byte search) {
        if (arr != null) {
            for (int i = 0; i < arr.length; i++) {
                if (arr[i] == search) {
                    return true;
                }
            }
        }
        return false;
    }

    /**
     *
     * 检查数组中是否存在某几个值
     *
     * @param arr
     * @param search
     * @return
     */
    public static boolean inArray(byte[] arr, byte[] search) {
        if (search != null) {
            for (int i = 0; i < search.length; i++) {
                if (!inArray(arr, search[i])) {
                    return false;
                }
            }
            return true;
        }
        return false;
    }

    /**
     *
     * 检查数组中是否存在某个值,并返回其索引键,不存在则返回 -1 。
     *
     * @param arr
     * @param search
     * @return
     */
    public static int search(byte[] arr, byte search) {
        if (arr != null) {
            for (byte i = 0; i < arr.length; i++) {
                if (arr[i] == search) {
                    return i;
                }
            }
        }
        return -1;
    }

    /**
     * 返回一个单元顺序相反的数组<br />
     * 当 arr 为 null 时返回 new byte[0]。
     * @param arr
     * @return
     */
    public static byte[] reverse(byte[] arr) {
        byte[] rarr = new byte[0];
        if (arr != null) {
            rarr = new byte[arr.length];
            byte j = 0;
            for (int i = arr.length - 1; i >= 0; i--) {
                rarr[j++] = arr[i];
            }
        }
        return rarr;
    }

    /**
     * 使用 Byte List填充一个byte array。(转换Byte List为byte array)
     * @param list
     * @return 当 list 为 null 时返回 new byte[0]。
     */
    public static byte[] fill(List<Byte> list) {
        if (list == null) {
            return new byte[0];
        }
        int size = list.size();
        byte[] arr = new byte[size];

        for (int i = 0; i < size; i++) {
            arr[i] = list.get(i);
        }
        return arr;
    }

    /**
     * 使用 byte array填充一个 Byte List。(转换byte array为Byte List)
     * @param arr
     * @return 当 arr 为 null 时返回 new ArrayList<Byte>(size)。
     */
    public static List<Byte> fill(byte[] arr) {
        List<Byte> list = null;
        if (arr == null) {
            return new ArrayList<Byte>(0);
        }
        int size = arr.length;
        list = new ArrayList<Byte>(size);
        for (byte by : arr) {
            list.add(by);
        }
        return list;
    }

    /**
     * Object array tools
     * =====================
     */
    /**
     *
     * 计算数组中的单元数目或对象中的属性个数
     * 当 arr 为 null 时返回 0。
     *
     * @param arr
     * @return
     */
    public static int sizeOf(Object[] arr) {
        return arr == null ? 0 : arr.length;
    }

    /**
     *
     * 合并一个或多个数组
     * 当 arr 为 null 时返回 new Object[0]。
     *
     * @param arrs
     * @return
     */
    public static Object[] merge(Object[]... arrs) {
        Object[] result = new Object[0];
        if (arrs != null) {
            int count = 0;
            for (int i = 0; i < arrs.length; i++) {
                count += arrs[i].length;
            }
            result = new Object[count];
            Object arg;
            int k = 0;
            for (int i = 0; i < arrs.length; i++) {
                if (arrs[i] == null) {
                    continue;
                }
                for (int j = 0; j < arrs[i].length; j++) {
                    arg = arrs[i][j];
                    result[k] = arg;
                    k++;
                }
            }
        }
        return result;
    }

    /**
     *
     * 计算数组的差集
     * 注意:
     *     aArr 为null时 返回 bArr(可能为 null)。
     *     bArr 为null时 返回 aArr。
     *     无差集时返回 new Object[0];
     *
     * @param aArr
     * @param bArr
     * @return
     */
    public static Object[] diff(Object[] aArr, Object[] bArr) {
        {
            if (aArr == null) {
                return bArr;
            }
            if (bArr == null) {
                return aArr;
            }
        }
        Object[] cArr = new Object[aArr.length + bArr.length];
        int idx = 0;
        /**
         * 检查 a 中那些元 在 b 中不存在
         */
        for (int i = 0; i < aArr.length; i++) {
            if (!inArray(bArr, aArr[i])) {
                cArr[idx++] = aArr[i];
            }
        }
        /**
         * 检查 b 中那些元 在 a 中不存在
         */
        for (int i = 0; i < bArr.length; i++) {
            if (!inArray(aArr, bArr[i])) {
                cArr[idx++] = bArr[i];
            }
        }
        //
        Object[] dArr = new Object[idx];
        System.arraycopy(cArr, 0, dArr, 0, dArr.length);
        return dArr;
    }

    /**
     *
     * 返回一个数组的全复制
     * 当 arr 为 null 时返回 new int[0] 。
     *
     * @param arr
     * @return
     */
    public static Object[] copyOf(Object[] arr) {
        Object[] carr = new Object[0];
        if (arr != null) {
            carr = new Object[arr.length];
            System.arraycopy(arr, 0, carr, 0, arr.length);
        }
        return carr;
    }

    /**
     *
     * 返回一个数组的复制
     * 当 arr 为 null 时返回 new Object[0] 。
     *
     * @param arr
     * @param i
     * @return
     */
    public static Object[] copyOf(Object[] arr, int i) {
        Object[] carr = new Object[0];
        if (arr != null) {
            if (i > arr.length) {
                i = arr.length;
            }
            carr = new Object[i];
            System.arraycopy(arr, 0, carr, 0, i);
        }
        return carr;
    }

    /**
     *
     * 从数组中随机取出一个或多个单元
     * 当 arr 为 null 时返回 new Object[0]。
     *
     * @param arr
     * @return
     */
    public static Object[] random(Object[] arr) {
        if (arr == null) {
            return new Object[0];
        }
        int count = new Random().nextInt(arr.length);
        count = count > 0 ? count : 1;
        return random(arr, count);
    }

    /**
     *
     * 将数组打乱
     * 当 arr 为 null 时返回 new Object[0]。
     *
     * @param arr
     * @return
     */
    public static Object[] shuffle(Object[] arr) {
        if (arr == null) {
            return new Object[0];
        }
        return random(arr, arr.length);
    }

    /**
     *
     * 随机取出固定数量的元素
     * 如取出数量大于数组元素数则返回打乱的数组,等同于 {@link #shuffle}
     * 当 arr 为 null 时返回 new Object[0]。
     *
     * @param arr
     * @param count
     * @return
     */
    public static Object[] random(Object[] arr, int count) {
        Object[] rarr = new Object[0];
        if (arr != null) {
            if (arr.length < count) {
                count = arr.length;
            }
            Random random = new Random();
            int i = 0;
            int num = 0;
            rarr = new Object[count];
            int[] keys = new int[count];
            for (int j = 0; j < keys.length; j++) {
                keys[j] = -1;
            }
            do {
                num = random.nextInt(arr.length);
                if (!inArray(keys, num)) {
                    keys[i] = num;
                    rarr[i] = arr[num];
                    i++;
                }
            } while (i < count);
        }
        return rarr;
    }

    /**
     *
     * 检查数组中是否存在某个值
     *
     * @param arr
     * @param search
     * @return
     */
    public static boolean inArray(Object[] arr, Object search) {
        if (arr != null && search != null) {
            for (int i = 0; i < arr.length; i++) {
                if (search.equals(arr[i])) {
                    return true;
                }
            }
        }
        return false;
    }

    /**
     *
     * 检查数组中是否存在某几个值
     *
     * @param arr
     * @param search
     * @return
     */
    public static boolean inArray(Object[] arr, Object[] search) {
        if (search != null) {
            for (int i = 0; i < search.length; i++) {
                if (!inArray(arr, search[i])) {
                    return false;
                }
            }
            return true;
        }
        return false;
    }

    /**
     *
     * 检查数组中是否存在某个值,并返回其索引键,不存在则返回 -1 。
     *
     * @param arr
     * @param search
     * @return
     */
    public static int search(Object[] arr, Object search) {
        if (arr != null && search != null) {
            for (int i = 0; i < arr.length; i++) {
                if (search.equals(arr[i])) {
                    return i;
                }
            }
        }
        return -1;
    }

    /**
     *
     * 返回一个单元顺序相反的数组
     * 当 arr 为 null 时返回 new Object[0]。
     *
     * @param arr
     * @return
     */
    public static Object[] reverse(Object[] arr) {
        Object[] rarr = new Object[0];
        if (arr != null) {
            rarr = new Object[arr.length];
            int j = 0;
            for (int i = arr.length - 1; i >= 0; i--) {
                rarr[j++] = arr[i];
            }
        }
        return rarr;
    }

    /**
     * String array tools
     * =====================
     */
    /**
     *
     * 计算数组中的单元数目或对象中的属性个数
     * 当 arr 为 null 时返回 0。
     *
     * @param arr
     * @return
     */
    public static int sizeOf(String[] arr) {
        return arr == null ? 0 : arr.length;
    }

    /**
     *
     * 合并一个或多个数组
     * 当 arr 为 null 时返回 new String[0]。
     *
     * @param arrs
     * @return
     */
    public static String[] merge(String[]... arrs) {
        String[] result = new String[0];
        if (arrs != null) {
            int count = 0;
            for (int i = 0; i < arrs.length; i++) {
                count += arrs[i].length;
            }
            result = new String[count];
            String arg;
            int k = 0;
            for (int i = 0; i < arrs.length; i++) {
                if (arrs[i] == null) {
                    continue;
                }
                for (int j = 0; j < arrs[i].length; j++) {
                    arg = arrs[i][j];
                    result[k] = arg;
                    k++;
                }
            }
        }
        return result;
    }

    /**
     *
     * 计算数组的差集
     * 注意:
     *     aArr 为null时 返回 bArr(可能为 null)。
     *     bArr 为null时 返回 aArr。
     *     无差集时返回 new String[0];
     *
     * @param aArr
     * @param bArr
     * @return
     */
    public static String[] diff(String[] aArr, String[] bArr) {
        {
            if (aArr == null) {
                return bArr;
            }
            if (bArr == null) {
                return aArr;
            }
        }
        String[] cArr = new String[aArr.length + bArr.length];
        int idx = 0;
        /**
         * 检查 a 中那些元 在 b 中不存在
         */
        for (int i = 0; i < aArr.length; i++) {
            if (!inArray(bArr, aArr[i])) {
                cArr[idx++] = aArr[i];
            }
        }
        /**
         * 检查 b 中那些元 在 a 中不存在
         */
        for (int i = 0; i < bArr.length; i++) {
            if (!inArray(aArr, bArr[i])) {
                cArr[idx++] = bArr[i];
            }
        }
        //
        String[] dArr = new String[idx];
        System.arraycopy(cArr, 0, dArr, 0, dArr.length);
        return dArr;
    }

    /**
     *
     * 返回一个数组的全复制
     * 当 arr 为 null 时返回 new String[0] 。
     *
     * @param arr
     * @return
     */
    public static String[] copyOf(String[] arr) {
        String[] carr = new String[0];
        if (arr != null) {
            carr = new String[arr.length];
            System.arraycopy(arr, 0, carr, 0, arr.length);
        }
        return carr;
    }

    /**
     *
     * 返回一个数组的复制
     * 当 arr 为 null 时返回 new String[0] 。
     *
     * @param arr
     * @param i
     * @return
     */
    public static String[] copyOf(String[] arr, int i) {
        String[] carr = new String[0];
        if (arr != null) {
            if (i > arr.length) {
                i = arr.length;
            }
            carr = new String[i];
            System.arraycopy(arr, 0, carr, 0, i);
        }
        return carr;
    }

    /**
     *
     * 从数组中随机取出一个或多个单元
     * 当 arr 为 null 时返回  new String[0] 。
     *
     * @param arr
     * @return
     */
    public static String[] random(String[] arr) {
        if (arr == null) {
            return new String[0];
        }
        int count = new Random().nextInt(arr.length);
        count = count > 0 ? count : 1;
        return random(arr, count);
    }

    /**
     *
     * 将数组打乱
     * 当 arr 为 null 时返回 new String[0] 。
     *
     * @param arr
     * @return
     */
    public static String[] shuffle(String[] arr) {
        if (arr == null) {
            return new String[0];
        }
        return random(arr, arr.length);
    }

    /**
     *
     * 随机取出固定数量的元素
     * 如取出数量大于数组元素数则返回打乱的数组,等同于 {@link #shuffle}
     * 当 arr 为 null 时返回 new String[0] 。
     *
     * @param arr
     * @param count
     * @return
     */
    public static String[] random(String[] arr, int count) {
        String[] rarr = new String[0];
        if (arr != null) {
            if (arr.length < count) {
                count = arr.length;
            }
            Random random = new Random();
            int i = 0;
            int num = 0;
            rarr = new String[count];
            int[] keys = new int[count];
            for (int j = 0; j < keys.length; j++) {
                keys[j] = -1;
            }
            do {
                num = random.nextInt(arr.length);
                if (!inArray(keys, num)) {
                    keys[i] = num;
                    rarr[i] = arr[num];
                    i++;
                }
            } while (i < count);
        }
        return rarr;
    }

    /**
     *
     * 检查数组中是否存在某个值
     *
     * @param arr
     * @param search
     * @return
     */
    public static boolean inArray(String[] arr, String search) {
        if (arr != null && search != null) {
            for (int i = 0; i < arr.length; i++) {
                if (search.equals(arr[i])) {
                    return true;
                }
            }
        }
        return false;
    }

    /**
     *
     * 检查数组中是否存在某几个值
     *
     * @param arr
     * @param search
     * @return
     */
    public static boolean inArray(String[] arr, String[] search) {
        if (search != null) {
            for (int i = 0; i < search.length; i++) {
                if (!inArray(arr, search[i])) {
                    return false;
                }
            }
            return true;
        }
        return false;
    }

    /**
     *
     * 检查数组中是否存在某个值,并返回其索引键,不存在则返回 -1 。
     *
     * @param arr
     * @param search
     * @return
     */
    public static int search(String[] arr, String search) {
        if (arr != null && search != null) {
            for (int i = 0; i < arr.length; i++) {
                if (search.equals(arr[i])) {
                    return i;
                }
            }
        }
        return -1;
    }

    /**
     *
     * 返回一个单元顺序相反的数组
     * 当 arr 为 null 时返回 new String[0] 。
     *
     * @param arr
     * @return
     */
    public static String[] reverse(String[] arr) {
        String[] rarr = new String[0];
        if (arr != null) {
            rarr = new String[arr.length];
            int j = 0;
            for (int i = arr.length - 1; i >= 0; i--) {
                rarr[j++] = arr[i];
            }
        }
        return rarr;
    }

    /**
     * 使用间隔符连接
     * @param strs
     * @param sep
     * @return
     */
    public static String join(String[] strs, String sep) {
        StringBuilder strBuilder = new StringBuilder();
        if (strs != null) {
            for (int i = 0; i < strs.length; i++) {
                strBuilder.append(strs[i]);
                if (i < strs.length - 1) {
                    strBuilder.append(sep);
                }
            }
        }
        return strBuilder.toString();
    }
}

原文:java数组操作工具类

源代码下载地址:http://www.zuidaima.com/share/1550463350262784.htm

时间: 2024-10-05 06:17:34

java数组操作工具类的相关文章

Java 数组工具类排序,最大值最小值等

public class ArrayUtils{ /** * 返回数组最大值 * * @param a * @return */ public static int max(int[] a){ // 返回数组最大值 int x; int aa[]=new int[a.length]; System.arraycopy(a,0,aa,0,a.length); x=aa[0]; for(int i=1;i<aa.length;i++){ if(aa[i]>x){ x=aa[i]; } } retu

java===数组工具类创建,并使用eclipse导出说明文档.html

package cn.china; //import java.util.Arrays; //import java.util.Scanner; /** * 数组工具类,并且类内部方法都为静态方法,不提供初始化对象调用!!! * 包含数组排序.最值.查找等方法 * @author 王大侠 * @version V1.0*/ public class ArrayTool { private ArrayTool() { } /** * 数组选择排序 * @param arr 传入一个数组用于验证程序

Java日期操作工具类

/** * 格式化日期显示格式 * * @param sdate * 原始日期格式 s - 表示 "yyyy-mm-dd" 形式的日期的 String 对象 * @param format * 格式化后日期格式 * @return 格式化后的日期显示 */ public static String dateFormat(String sdate, String format) { SimpleDateFormat formatter = new SimpleDateFormat(for

java常用工具类(从开源项目smartframework项目copy过来备用)

1.数组操作工具类 package org.smart4j.framework.util; import org.apache.commons.lang.ArrayUtils; /** * 数组操作工具类 * * @author huangyong * @since 1.0 */ public class ArrayUtil { /** * 判断数组是否非空 */ public static boolean isNotEmpty(Object[] array) { return !ArrayUt

Java IO(文件操作工具类)

FileOperate实现的功能: 1. 返回文件夹中所有文件列表 2. 读取文本文件内容 3. 新建目录 4. 新建多级目录 5. 新建文件 6. 有编码方式的创建文件 7. 删除文件 8. 删除指定文件夹下所有文件 9. 复制单个文件 10. 复制整个文件夹的内容 11. 移动文件 12. 移动目录 13. 建立一个可以追加的bufferedwriter 14. 得到一个bufferedreader Java代码    package utils; import java.io.Buffer

拼音操作工具类 - PinyinUtil.java

拼音操作工具类,提供字符串转换成拼音数组.汉字转换成拼音.取汉字的首字母等方法. 源码如下:(点击下载 -PinyinUtil.java.pinyin4j-2.5.0.jar ) 1 import net.sourceforge.pinyin4j.PinyinHelper; 2 import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; 3 import net.sourceforge.pinyin4j.format.HanyuPiny

字符串工具类、数组工具类、集合工具类、转型操作工具类、编码与解码操作工具类

package hjp.smart4j.framework.util; import org.apache.commons.lang3.StringUtils; /** * 字符串工具类 */ public final class StringUtil { /** * 字符串分隔符 */ public static final String SEPARATOR=String.valueOf((char)29); /** * 判断字符串是否为空 */ public static boolean i

JAVA FileUtils(文件读写以及操作工具类)

转别人的合并的链接 //https://www.cnblogs.com/chenhuan001/p/6575053.html //https://blog.csdn.net/lovoo/article/details/77899627 第一个链接找不到了作者看见了说一下我给你上链接(但是你的名字信息没改哈!!) package com; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import

FileUtils.java 本地 文件操作工具类

package Http; import java.io.File;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.IOException; /** * * 本地文件操作工具类 *保存文本 *保存图片 * Created by lxj-pc on 2017/6/27. */public class FileUtils { public static void saveText(String cont