复制ArrayList的前半部分
有一个ArrayList al
,我想将其前半部分元素复制到另一个ArrayList 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)); }
你应该使用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
List#subList
非常适合此目的。
int chunkSize = al.size() % 2 == 0 ? al.size() / 2 : (al.size() / 2) + 1; List firstHalf = al.subList(0, chunkSize);
有两种情况需要考虑:
- 偶数 :如果大小是偶数,则n / 2是块大小的正确大小。
- 奇数 :如果大小是奇数,那么你需要在奇数长度列表的结果中加1,以得到中间值。
另一种方法:
List firstHalf = al.subList(0, al.size()/2 + (al.size()%2) - 1);
List firstHalf = al.subList(0, (int) al.size() / 2 + 1);
更容易将al.size()/ 2转换为整数而不是“%2”。
你将firstHalf加1比下半部分大。