ArrayUtils
该类是操作数组的工具类,因为数组和List不一样,长度不可变,如果尝试对数组增加,删除元素,必须重新定义新的数组,将已定义的数组拷贝到新数组中,总之操作起来非常麻烦,使用该类,可以轻松搞定,下面我们介绍常用方法。
对数组增删截取的常用方法
- add
除了可以传入int数组外,还可以传入byte[],char[],long[]等基本数据类型。第二个参数是需要添加的元素
public static int[] add(int[] array, int element) {
- remove
除了可以传入int数组外,还可以传入byte[],char[],long[]等基本数据类型。第二个参数是需要移除的元素
public static int[] remove(int[] array, int element) {
- subarray
除了可以传入int数组外,还可以传入byte[],char[],long[]等基本数据类型。第二个参数是要截取的开始索引。第三个参数是要截取的结束索引
public static int[] subarray(int[] array, int startIndexInclusive, int endIndexExclusive) {
测试代码:
package ArrayUtilsTest;
import java.util.Arrays;
import org.apache.commons.lang3.ArrayUtils;
public class AddRemovceSubArrayTest{
public static void main(String[] args) {
int[] arrayAdd = { 1, 2 };
arrayAdd = ArrayUtils.add(arrayAdd, 3);
System.err.println("arrayAdd=" + Arrays.toString(arrayAdd));int[] arrayRemove = { 1, 2, 3 };
arrayRemove = ArrayUtils.remove(arrayRemove, 1);
System.err.println("arrayRemove=" + Arrays.toString(arrayRemove));int[] arrayCut = { 1, 2, 3, 4 };
arrayCut = ArrayUtils.subarray(arrayCut, 1, 3);
System.err.println("arrayCut=" + Arrays.toString(arrayCut));}
}
执行结果
arrayAdd=[1, 2, 3]
arrayRemove=[1, 3]
arrayCut=[2, 3]
对数组检索的常用方法
- contains
指定的数组中是否包含传入的值
public static boolean contains(Object[] array, Object objectToFind) {
- indexOf
在指定的数组中,查找传入值第一次出现的索引位置,如果没有查找到返回-1,-1在ArrayUtils类中被定义成常量,判断时,可以使用INDEX_NOT_FOUND
public static int indexOf(Object[] array, Object objectToFind) {
- lastIndexOf
在指定的数组中,查找传入值最后一次出现的索引位置,如果没有查找到返回-1
public static int lastIndexOf(Object[] array, Object objectToFind) {
测试代码:
package ArrayUtilsTest;
import org.apache.commons.lang3.ArrayUtils;
public class SearchArrayTest {
public static void main(String[] args) {
String[] arraySrc = { "iosoft2020", "iosoft2021", "iosoft2022", "iosoft2021" };
System.err.println(ArrayUtils.contains(arraySrc, "iosoft2022"));
System.err.println(ArrayUtils.indexOf(arraySrc, "iosoft2021"));
System.err.println(ArrayUtils.indexOf(arraySrc, "iosoft2023"));
System.err.println(ArrayUtils.lastIndexOf(arraySrc, "iosoft2021"));
System.err.println(ArrayUtils.lastIndexOf(arraySrc, "iosoft2023"));
System.err.println(ArrayUtils.INDEX_NOT_FOUND == -1);}
}
执行结果
true
1
-1
3
-1
true
对数组校验的常用方法
- isEmpty
判断数组是否为null或者空数组
public static boolean isEmpty(Object[] array) {
- isSameLength
判断两个数组是否是同样的长度
public static boolean isSameLength(Object[] array1, Object[] array2) {
- isEquals
判断两个数组的长度和元素是否相同
public static boolean isEquals(Object array1, Object array2) {
测试代码:
package ArrayUtilsTest;
import org.apache.commons.lang3.ArrayUtils;
public class CheckArrayTest {
public static void main(String[] args) {
String[] arraySrc = { "iosoft2020", "iosoft2021", "iosoft2022" };
String[] arrayDest = { "iosoft2023", "iosoft2024", "iosoft2025" };
String[] arraySrcCopy = { "iosoft2020", "iosoft2021", "iosoft2022" };
System.err.println(ArrayUtils.isEmpty(arraySrc));
System.err.println(ArrayUtils.isSameLength(arraySrc, arrayDest));
System.err.println(ArrayUtils.isEquals(arraySrc, arraySrcCopy));}
}
执行结果
false
true
true
怎样创建一个空数组
当我们调用某方法,需要返回空数组时,传统的方法,需要new一个数组对象,new关键字大家都知道,需要在堆内存中分配一个内存空间,每次new,每次都要在堆内存中分配内存空间,这样严重影响程序执行效率,而ArrayUtils类中为我们提供了一个静态变量,不需要实例化,直接使用,个人还是比较喜欢这样的风格,具体业务中的常量我们需要定义以外,像这样jdk级别的常量,大部分我们都可以通过第三方jar包中找到,后续我会继续像大家介绍一些这样风格的类或者是常量
public Object[] getObjectArray() {
return ArrayUtils.EMPTY_OBJECT_ARRAY;
}
基本类型和包装类型数组的相互转换
大家知道,java中的基本数据类型都对应着其包装类型,例如,int和Integer,byte和Byte等,那我们看看基本类型的数组和其包装类型的数组是怎样的转换的。
- toPrimitive
把包装类型数组转换基本类型数组,该方法是重载方法,还提供了其他基本类型的方法,大家可以自行参照源码
public static int[] toPrimitive(Integer[] array) {
- toObject
把基本类型数组转换包装类型数组,该方法也是重载方法,还提供了其他基本类型的方法,大家可以自行参照源码
public static Byte[] toObject(byte[] array) {
测试代码:
package ArrayUtilsTest;
import org.apache.commons.lang3.ArrayUtils;
public class Object2PrimitiveTest {
public static void main(String[] args) {
Integer[] integerArrays = new Integer[] { 1, 2 };
int[] intArrays = ArrayUtils.toPrimitive(integerArrays);byte[] byteArrays = new byte[] { 1, 2 };
Byte[] byteRapArrays = ArrayUtils.toObject(byteArrays);}
}
数组转换Map
这里需要说明的是,map是key-value键值对形式的数据结构,我们就需要使用二维数组来转换map,用法很简单,参照下面的代码
测试代码:
package ArrayUtilsTest;
import java.util.Map;
import org.apache.commons.lang3.ArrayUtils;
public class Array2MapTest {
public static void main(String[] args) {
Map<Object, Object> map = ArrayUtils.toMap(new String[][]{
{"1","iosoft2020"},
{"2","iosoft2021"}
});}
}
还是很实用的,大家根据项目中的需求来选择具体的实现,下篇见。