分割数组:将数组分割成指定最大长度的几个数组
/**
* 分割数组
*
* @param array 原数组
* @param Size 分割后每个数组的最大长度
* @param <T> 原数组的类型
* @return
*/
public <T> List<Object[]> split_array(T[] array, int Size) {
List<Object[]> list = new ArrayList();
int i = (array.length) % Size == 0 ? (array.length) / Size : (array.length) / Size + 1;
for (int j = 0; j < i; j++) {
List<T> list1 = new ArrayList();
for (int k = 0; k < Size; k++) {
if ((j * Size + k) >= array.length) {
break;
} else {
list1.add((array[j * Size + k]));
}
}
/**
* list.toArray()之后只能转成Object类型的数组,不能转成int和Integer等
* 否则会报:java.lang.ClassCastException:
* [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;
* 非检测性异常
* 所以只能是List<Object[]>,不能是List<T[]>
*/
list.add(list1.toArray());
}
return list;
}
注意:list.toArray()之后只能转成Object类型的数组,不能转成int和Integer等其他类型,不然会报错。我们可以点开.toArray()源码,他返回的就是一个Object类型的数组。
合并数组:将几个数组合并成为一个数组
/**
* 合并数组
*
* @param original 原数组
* @param add_arrays 需要增加的数组
* @param <T> 数组的类型
* @return
*/
public <T> T[] concat_array(T[] original, T[]... add_arrays) {
int o_length = original.length;
for (T[] array : add_arrays) {
o_length += array.length;
}
//先定义出指定长度的数组
T[] new_Array = Arrays.copyOf(original, o_length);
for (T t : new_Array) {
System.out.print(t + ":");
}
System.out.println();
int o_length1 = original.length;
for (T[] array : add_arrays) {
//System提供了一个静态方法arraycopy(),可以使用它来实现数组之间的复制
/**
* 第一个参数表示要增加的数组
* 第二个参数表示要增加数组的开始下标(从增加数组的那个下标开始取值)
* 第三个参数表示结果数组(被增加的数组)
* 第四个参数表示从结果数组(被增加的数组)那个下标开始赋值
* 第五个参数表示取增加数组值的长度
* 这个例子中:表示将array从下标0开始获取array长度个元素,即获取整个array的元素
* 赋值给new_array,从new_array下标o_length1(original的长度)的地方开始赋值
*/
for (T t : array) {
System.out.print(t + ":");
}
System.out.println();
System.arraycopy(array, 0, new_Array, o_length1, array.length);
o_length1 += array.length;
}
return new_Array;
}
测试:
@Test
public void test() {
/**
* 将a数组,分割成为长度为4的几个数组
*/
Integer[] a = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
List list = split_array(a, 4);
for (int y = 0; y < list.size(); y++) {
//int[] a1 = (int[]) list.get(y);
Object[] a1 = (Object[]) list.get(y);
for (int r = 0; r < a1.length; r++) {
System.out.print(a1[r] + " ");
}
System.out.println();
}
System.out.println("=================================");
String[] st = {"A", "B", "C", "D", "E"};
String[] dt = {"F", "G", "H", "I", "J"};
String a2[] = concat_array(st, dt);
for (String i : a2) {
System.out.print(i + " ");
}
}
测试结果: