1700444340
1700444341
for(int i=0,size=list.size();i<size;i++){
1700444342
1700444343
if(i>=20&&i<30){
1700444344
1700444345
list.remove(i);
1700444346
1700444347
}
1700444348
1700444349
}
1700444350
1700444351
}
1700444352
1700444353
或者
1700444354
1700444355
for(int i=20;i<30;i++){
1700444356
1700444357
if(i<list.size()){
1700444358
1700444359
list.remove(i);
1700444360
1700444361
}
1700444362
1700444363
}
1700444364
1700444365
相信首先出现在大家脑海中的实现就是此算法了,遍历一遍,符合条件的就删除,简单而又实用。不过,还有没有其他方式呢?有没有“one-lining”一行代码就解决问题的方式呢?
1700444366
1700444367
有,直接使用ArrayList的removeRange方法不就可以了吗?等等,好像不可能呀,虽然JDK上有此方法,但是它有protected关键字修饰着,不能直接使用,那怎么办?看看如下代码。
1700444368
1700444369
public static void main(String[]args){
1700444370
1700444371
//初始化一个固定长度,不可变列表
1700444372
1700444373
List<Integer>initData=Collections.nCopies(100,0);
1700444374
1700444375
//转换为可变列表
1700444376
1700444377
ArrayList<Integer>list=new ArrayList<Integer>(initData);
1700444378
1700444379
//删除指定范围的元素
1700444380
1700444381
list.subList(20,30).clear();
1700444382
1700444383
}
1700444384
1700444385
上一个建议讲解了subList方法的具体实现方式,所有的操作都是在原始列表上进行的,那我们就用subList先取出一个子列表,然后清空。因为subList返回的List是原始列表的一个视图,删除这个视图中的所有元素,最终就会反映到原始字符串上,那么一行代码即解决问题了。
1700444386
1700444387
1700444388
1700444389
[
上一页 ]
[ :1.70044434e+09 ]
[
下一页 ]