【发布时间】:2011-04-20 13:24:56
【问题描述】:
我有一个大小为 300000 的数组,我希望它将它分成 2 个相等的部分。有什么方法可以在这里实现这个目标吗?
会比for循环操作更快还是不会对性能造成影响?
【问题讨论】:
我有一个大小为 300000 的数组,我希望它将它分成 2 个相等的部分。有什么方法可以在这里实现这个目标吗?
会比for循环操作更快还是不会对性能造成影响?
【问题讨论】:
您可以使用System.arraycopy()。
int[] source = new int[1000];
int[] part1 = new int[500];
int[] part2 = new int[500];
// (src , src-offset , dest , offset, count)
System.arraycopy(source, 0 , part1, 0 , part1.length);
System.arraycopy(source, part1.length, part2, 0 , part2.length);
【讨论】:
Arrays.copyOf() 和Arrays.copyOfRange() 可能会稍微快一些(但它肯定会更短的代码;-))。
Arrays.copyOf() 和 Arrays.copyOfRange() 也只是 System.arrayCopy() 的包装。他们只是有一个更漂亮的调用语法并进行一些基本的验证,仅此而已
这可以满足您的需求,而无需创建新数组,因为它返回一个新数组。
int[] original = new int[300000];
int[] firstHalf = Arrays.copyOfRange(original, 0, original.length/2);
【讨论】:
将一个数组拆分为多个具有固定最大大小的数组。
public static <T extends Object> List<T[]> splitArray(T[] array, int max){
int x = array.length / max;
int r = (array.length % max); // remainder
int lower = 0;
int upper = 0;
List<T[]> list = new ArrayList<T[]>();
int i=0;
for(i=0; i<x; i++){
upper += max;
list.add(Arrays.copyOfRange(array, lower, upper));
lower = upper;
}
if(r > 0){
list.add(Arrays.copyOfRange(array, lower, (lower + r)));
}
return list;
}
示例 - 一个 11 个数组应拆分为多个大小不超过 5 个的数组:
// create and populate an array
Integer[] arr = new Integer[11];
for(int i=0; i<arr.length; i++){
arr[i] = i;
}
// split into pieces with a max. size of 5
List<Integer[]> list = ArrayUtil.splitArray(arr, 5);
// check
for(int i=0; i<list.size(); i++){
System.out.println("Array " + i);
for(int j=0; j<list.get(i).length; j++){
System.out.println(" " + list.get(i)[j]);
}
}
输出:
Array 0
0
1
2
3
4
Array 1
5
6
7
8
9
Array 2
10
【讨论】:
【讨论】:
java <classname> /6
使用此代码,它适用于 odd 或 even 列表大小。希望它对某人有所帮助。
int listSize = listOfArtist.size();
int mid = 0;
if (listSize % 2 == 0) {
mid = listSize / 2;
Log.e("Parting", "You entered an even number. mid " + mid
+ " size is " + listSize);
} else {
mid = (listSize + 1) / 2;
Log.e("Parting", "You entered an odd number. mid " + mid
+ " size is " + listSize);
}
//sublist returns List convert it into arraylist * very important
leftArray = new ArrayList<ArtistModel>(listOfArtist.subList(0, mid));
rightArray = new ArrayList<ArtistModel>(listOfArtist.subList(mid,
listSize));
【讨论】: