有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));
}
答案 0 :(得分:8)
List#subList
完全适合此目的。
int chunkSize = al.size() % 2 == 0 ? al.size() / 2 : (al.size() / 2) + 1;
List<Integer> firstHalf = al.subList(0, chunkSize);
有两种情况需要考虑:
答案 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比下半部分大。