复制ArrayList的前半部分

时间:2014-02-05 20:32:15

标签: java arraylist

ArrayList<Integer> al,我想将其元素的前半部分复制到另一个ArrayList<Integer> firstHalf。 (如果al具有奇数个元素,firstHalf应该还有一个元素。)但是,以下代码抛出IndexOutOfBoundsException,并说Index: 0, Size: 0,但我不确定如何这将是一个问题,因为ArrayLists的索引从0开始。另外,我知道.arraycopy,但我想这样做,使用for循环。

 int x = al.size()/2 + (al.size()%2) - 1;
 for(int i = 0; i < x; i++){
    firstHalf.set(i, al.get(i));
 }

4 个答案:

答案 0 :(得分:8)

List#subList 完全适合此目的。

int chunkSize = al.size() % 2 == 0 ? al.size() / 2 : (al.size() / 2) + 1;
List<Integer> firstHalf = al.subList(0, chunkSize);

有两种情况需要考虑:

  • 偶数:如果大小均匀,那么n / 2的大小是正确的大小。
  • 奇数:如果大小为奇数,则需要在奇数长度列表的结果中加1才能得到中间值。

答案 1 :(得分:6)

您应该使用add代替set

int x = al.size()/2 + (al.size()%2) - 1;
for(int i = 0; i < x; i++){
    firstHalf.add(al.get(i));
 }

最好使用List#subList

答案 2 :(得分:1)

另一种方法:

List<Integer> firstHalf = al.subList(0, al.size()/2 + (al.size()%2) - 1);

答案 3 :(得分:0)

List<Integer> firstHalf = al.subList(0, (int) al.size() / 2 + 1);

更容易将al.size()/ 2转换为整数而不是“%2”。

你将firstHalf加1比下半部分大。