打字猴:1.700444324e+09
1700444324 编写高质量代码:改善Java程序的151个建议 [:1700438142]
1700444325 编写高质量代码:改善Java程序的151个建议 建议71:推荐使用subList处理局部列表
1700444326
1700444327 我们来看这样一个简单的需求:一个列表有100个元素,现在要删除索引位置为20~30的元素。这很简单,一个遍历很快就可以完成,代码如下:
1700444328
1700444329 public static void main(String[]args){
1700444330
1700444331 //初始化一个固定长度,不可变列表
1700444332
1700444333 List<Integer>initData=Collections.nCopies(100,0);
1700444334
1700444335 //转换为可变列表
1700444336
1700444337 List<Integer>list=new ArrayList<Integer>(initData);
1700444338
1700444339 //遍历,删除符合条件的元素
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);
[ 上一页 ]  [ :1.700444324e+09 ]  [ 下一页 ]