commons-lang3的ArrayUtils
静态常量
各个基本类型、引用类型的空数组
public static final boolean[] EMPTY_BOOLEAN_ARRAY = new boolean[0];
public static final Boolean[] EMPTY_BOOLEAN_OBJECT_ARRAY = new Boolean[0];
public static final byte[] EMPTY_BYTE_ARRAY = new byte[0];
public static final Byte[] EMPTY_BYTE_OBJECT_ARRAY = new Byte[0];
public static final char[] EMPTY_CHAR_ARRAY = new char[0];
public static final Character[] EMPTY_CHARACTER_OBJECT_ARRAY = new Character[0];
public static final Class<?>[] EMPTY_CLASS_ARRAY = new Class[0];
public static final double[] EMPTY_DOUBLE_ARRAY = new double[0];
public static final Double[] EMPTY_DOUBLE_OBJECT_ARRAY = new Double[0];
public static final Field[] EMPTY_FIELD_ARRAY = new Field[0];
public static final float[] EMPTY_FLOAT_ARRAY = new float[0];
public static final Float[] EMPTY_FLOAT_OBJECT_ARRAY = new Float[0];
public static final int[] EMPTY_INT_ARRAY = new int[0];
public static final Integer[] EMPTY_INTEGER_OBJECT_ARRAY = new Integer[0];
public static final long[] EMPTY_LONG_ARRAY = new long[0];
public static final Long[] EMPTY_LONG_OBJECT_ARRAY = new Long[0];
public static final Method[] EMPTY_METHOD_ARRAY = new Method[0];
public static final Object[] EMPTY_OBJECT_ARRAY = new Object[0];
public static final short[] EMPTY_SHORT_ARRAY = new short[0];
public static final Short[] EMPTY_SHORT_OBJECT_ARRAY = new Short[0];
public static final String[] EMPTY_STRING_ARRAY = new String[0];
public static final Throwable[] EMPTY_THROWABLE_ARRAY = new Throwable[0];
public static final Type[] EMPTY_TYPE_ARRAY = new Type[0];
/**
* 未找到元素时返回的index
*/
public static final int INDEX_NOT_FOUND = -1;
判断、比较
//是否为空(自身为null或元素数量为0)
boolean isEmpty = ArrayUtils.isEmpty(arr);
boolean isNotEmpty = ArrayUtils.isNotEmpty(arr);
boolean sameLength = ArrayUtils.isSameLength(arr1, arr2);
boolean isSameType = ArrayUtils.isSameType(arr1, arr2);
//数组元素是否有序,数值基本类型比较数值大小,char比较ASCII码值
boolean isSorted = ArrayUtils.isSorted(arr);
//引用类型使用该类型实现的 Comparable::compareTo 方法比较
boolean isSorted = ArrayUtils.isSorted(T[] arr);
//引用类型也可以指定比较使用的 Comparator
boolean isSorted = ArrayUtils.isSorted(T[] arr, Comparator<T> comparator);
//索引范围是否合法
boolean arrayIndexValid = ArrayUtils.isArrayIndexValid(arr, index);
boolean contains = ArrayUtils.contains(arr, ele);
get
//获取指定位置上的元素,index越界时返回defaultValue,缺省defaultValue时默认为null
T t = ArrayUtils.get(arr, index);
T t = ArrayUtils.get(arr, index, defaultValue);
//arr为null时返回0,相当于兜住了arr为null时的NPE
int length = ArrayUtils.getLength(arr);
//数组是empty时返回空数组,否则返回原数组 (null => 空数组)
T[] arr = ArrayUtils.nullToEmpty(arr);
indexOf
//查找指定元素第一次出现的位置
int index = ArrayUtils.indexOf(arr, ele);
//最后一次出现的位置
int lastIndexOf = ArrayUtils.lastIndexOf(arr, ele);
//可以指定检索开始位置(含)
int index = ArrayUtils.indexOf(arr, ele, startIndex);
int lastIndexOf = ArrayUtils.lastIndexOf(arr, ele, startIndex);
//查找指定元素在数组中所有出现之处,返回index集合
BitSet bitSet = ArrayUtils.indexesOf(arr, ele);
数组创建后,index就确定了,从前往后index从0开始,indexOf、lastIndexOf只是检索方向不同,不影响数组自身的index。
增删元素
增删元素会引起数组元素数量改变,都是先创建容量正好的新数组,再拷贝、添加需要的元素,返回新数组
//在数组末尾添加元素
T[] newArr = ArrayUtils.add(arr, ele);
//在数组开头添加元素
T[] newArr = ArrayUtils.addFirst(arr, ele);
//在数组末尾添加多个元素
T[] newArr = ArrayUtils.addAll(arr, ele...);
//在指定位置插入0个或多个元素
T[] newArr = ArrayUtils.insert(index, arr, ele...);
//移除指定位置上的元素
T[] newArr = ArrayUtils.remove(arr, index);
T[] newArr = ArrayUtils.removeAll(arr, index...);
//移除指定元素。如果指定元素在数组中出现多次,则每次只移除第1次出现之处
T[] newArr = ArrayUtils.removeElement(arr, ele);
T[] newArr = ArrayUtils.removeElements(arr, ele...);
//移除指定元素所有出现之处
T[] newArr = ArrayUtils.removeAllOccurrences(arr, ele);
元素排列
- 以下操作都是返回void,直接在原数组上进行修改
- java中涉及到区间的都是左闭右开 [startIndex, endIndex)
//数组反序排列
ArrayUtils.reverse(arr);
//将指定范围上的元素反序排列
ArrayUtils.reverse(arr, startIndex, endIndex);
//将元素位置顺移offset。eg.顺移3:index=0 => 0+3=3,index=-1 => -1+3=2
ArrayUtils.shift(arr, offset);
//只对指定区域上的元素进行顺移
ArrayUtils.shift(arr, startIndex, endIndex, offset);
//如果offset大于要顺移的元素数量,offset会直接取:对要顺移的元素数量取模得到的值
//洗牌、打乱,使用Fisher-Yates算法将数组元素随机排列
ArrayUtils.shuffle(arr);
//交换指定位置上的元素
ArrayUtils.swap(arr, index1, index2);
//交换2段元素,index1、index2是起点index,length指定片段长度(元素个数)
ArrayUtils.swap(arr, index1, index2, length);
切割、复制、转换
//切割得到子数组
T[] subarray = ArrayUtils.subarray(arr, startIndex, endIndex);
//克隆数组
T[] arr2 = ArrayUtils.clone(arr1);
//将相同类型的多个元素转换为数组
T[] arr = ArrayUtils.toArray(ele...);
//将基本类型数组转换为对应的引用类型数组
T[] arr2 = ArrayUtils.toObject(arr1);
//将引用类型数组转换为对应的基本类型数组
t[] arr2 ArrayUtils.toPrimitive(arr1);
版权声明:本文为chy_18883701161原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。