自己编写的Java数组操作工具 (三)

2014-11-24 11:17:39 · 作者: · 浏览: 9
1 > array.length || index <= 0) {
throw new IllegalArgumentException();
}
int[] dest = new int[array.length + 1];
System.arraycopy(array, 0, dest, 0, index - 1);
dest[index - 1] = insertNumber;
System.arraycopy(array, index - 1, dest, index, dest.length - index);
return dest;
}

/**
* 整形数组中特定位置删除掉一个元素,数组中原有元素向前移动; 如果插入位置超出原数组,则抛IllegalArgumentException异常
*
* @param array
* @param index
* @return
*/
public static int[] remove(int[] array, int index) {
if (array == null || array.length == 0) {
throw new IllegalArgumentException();
}
if (index > array.length || index <= 0) {
throw new IllegalArgumentException();
}
int[] dest = new int[array.length - 1];
System.arraycopy(array, 0, dest, 0, index - 1);
System.arraycopy(array, index, dest, index - 1, array.length - index);
return dest;
}

/**
* 2个数组合并,形成一个新的数组
*
* @param array1
* @param array2
* @return
*/
public static int[] merge(int[] array1, int[] array2) {
int[] dest = new int[array1.length + array2.length];
System.arraycopy(array1, 0, dest, 0, array1.length);
System.arraycopy(array2, 0, dest, array1.length, array2.length);
return dest;
}

/**
* 数组中有n个数据,要将它们顺序循环向后移动k位, 即前面的元素向后移动k位,后面的元素则循环向前移k位,
* 例如,0、1、2、3、4循环移动3位后为2、3、4、0、1。
*
* @param array
* @param offset
* @return
*/
public static int[] offsetArray(int[] array, int offset) {
int length = array.length;
int moveLength = length - offset;
int[] temp = Arrays.copyOfRange(array, moveLength, length);
System.arraycopy(array, 0, array, offset, moveLength);
System.arraycopy(temp, 0, array, 0, offset);
return array;
}

/**
* 随机打乱一个数组
*
* @param list
* @return
*/
public static List shuffle(List list) {
java.util.Collections.shuffle(list);
return list;
}

/**
* 随机打乱一个数组
*
* @param array
* @return
*/
public int[] shuffle(int[] array) {
Random random = new Random();
for (int index = array.length - 1; index >= 0; index--) {
// 从0到index处之间随机取一个值,跟index处的元素交换
exchange(array, random.nextInt(index + 1), index);
}
return array;
}

// 交换位置
private void exchange(int[] array, int p1, int p2) {
int temp = array[p1];
array[p1] = array[p2];
array[p2] = temp;
}

/**
* 对两个有序数组进行合并,并将重复的数字将其去掉
*
* @param a
* :已排好序的数组a
* @param b
* :已排好序的数组b
* @return 合并后的排序数组
*/
private static List mergeByList(int[] a, int[] b) {
// 用于返回的新数组,长度可能不为a,b数组之和,因为可能有重复的数字需要去掉
List c = new ArrayList();
// a数组下标
int aIndex = 0;
// b数组下标
int bIndex = 0;
// 对a、b两数组的值进行比较,并将小的值加到c,并将该数组下标+1,
// 如果相等,则将其任意一个加到c,两数组下标均+1
// 如果下标超出该数组长度,则退出循环
while (true) {
if (aIndex > a.length - 1 || bIndex > b.length - 1) {
break;
}
if (a[aIndex] < b[bIndex]) {