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

com.kaka.util.ArrayUtils Maven / Gradle / Ivy

package com.kaka.util;

/**
 * 数组操作相关工具类
 *
 * @author zkpursuit
 */
public final class ArrayUtils {

    public static final Class[] EMPTY_CLASS_ARRAY = new Class[0];

    /**
     * 数组首尾反转
     *
     * @param  数组类型
     * @param array 数组对象
     * @param startIndexInclusive 反转的开始索引
     * @param endIndexExclusive 反转的结束索引 + 1
     * @return 翻转后的原数组
     */
    public static  T[] reverse(final T[] array, int startIndexInclusive, int endIndexExclusive) {
        if (array == null) {
            return null;
        }
        int i = Math.max(startIndexInclusive, 0);
        int j = Math.min(array.length, endIndexExclusive) - 1;
        T tmp;
        while (j > i) {
            tmp = array[j];
            array[j] = array[i];
            array[i] = tmp;
            j--;
            i++;
        }
        return array;
    }

    /**
     * 数组反转
     *
     * @param  数组类型
     * @param array 数组对象
     */
    public static  void reverse(final T[] array) {
        reverse(array, 0, array.length);
    }

    /**
     * 数组首尾反转
     *
     * @param array 数组对象
     * @param startIndexInclusive 反转的开始索引
     * @param endIndexExclusive 反转的结束索引+1
     * @return 翻转后的原数组
     */
    public static Object reverse(final Object array, int startIndexInclusive, int endIndexExclusive) {
        if (array == null) {
            return null;
        }
        int length = getLength(array);
        if (length == 0) {
            return array;
        }
        int i = Math.max(startIndexInclusive, 0);
        int j;
        if (endIndexExclusive < 0) {
            j = length - 1;
        } else {
            j = Math.min(length, endIndexExclusive) - 1;
        }
        Object tmp;
        while (j > i) {
            tmp = get(array, j);
            set(array, j, get(array, i));
            set(array, i, tmp);
            j--;
            i++;
        }
        return array;
    }

    /**
     * 数组反转
     *
     * @param array 数组对象
     * @return 翻转后的原数组
     */
    public static Object reverse(final Object array) {
        return reverse(array, 0, -1);
    }

    /**
     * 创建一个新的数组
     *
     * @param c 数组元素类型
     * @param size 数组大小
     * @return 新的数组
     */
    static public Object newInstance(Class c, int size) {
        return java.lang.reflect.Array.newInstance(c, size);
    }

    /**
     * 创建一个新的数组
     *
     * @param  数组类型
     * @param c 数组类型
     * @param size 数组初始长度
     * @return 数组对象
     */
    static public  T[] newObjectArray(Class c, int size) {
        return (T[]) java.lang.reflect.Array.newInstance(c, size);
    }

    /**
     * 获取数组的长度
     *
     * @param array 数组对象
     * @return 数组长度
     */
    static public int getLength(Object array) {
        return java.lang.reflect.Array.getLength(array);
    }

    /**
     * 获取数组类型
     *
     * @param array 数组对象
     * @return 数组元素类型
     */
    static public Class getElementType(Object array) {
        return array.getClass().getComponentType();
    }

    /**
     * 获取数组类型
     *
     * @param array 数组对象
     * @return 数组元素类型通用名
     */
    static public String getElementTypeGenericName(Object array) {
        return getElementType(array).toGenericString();
    }

    /**
     * 获取数组指定元素的值
     *
     * @param array 数组对象
     * @param index 指定的数组下标
     * @return 指定的元素值
     */
    static public Object get(Object array, int index) {
        return java.lang.reflect.Array.get(array, index);
    }

    /**
     * 设置数组指定位置处的值
     *
     * @param array 数组对象
     * @param index 数组下标
     * @param value 赋入的元素值
     */
    static public void set(Object array, int index, Object value) {
        java.lang.reflect.Array.set(array, index, value);
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy