打字猴:1.700444374e+09
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
1700444390 编写高质量代码:改善Java程序的151个建议 [:1700438143]
1700444391 编写高质量代码:改善Java程序的151个建议 建议72:生成子列表后不要再操作原列表
1700444392
1700444393 前面说了,subList生成的子列表是原列表的一个视图,那在subList执行完后,如果修改了原列表的内容会怎样呢?视图是否会改变呢?如果是数据库视图,表数据变更了,视图当然会变了,至于subList生成的视图是否会改变,还是从源码上来看吧,代码如下:
1700444394
1700444395 public static void main(String[]args){
1700444396
1700444397 List<String>list=new ArrayList<String>();
1700444398
1700444399 list.add(“A”);
1700444400
1700444401 list.add(“B”);
1700444402
1700444403 list.add(“C”);
1700444404
1700444405 List<String>subList=list.subList(0,2);
1700444406
1700444407 //原字符串增加一个元素
1700444408
1700444409 list.add(“D”);
1700444410
1700444411 System.out.println(“原列表长度:”+list.size());
1700444412
1700444413 System.out.println(“子列表长度:”+subList.size());
1700444414
1700444415 }
1700444416
1700444417 程序中有一个原始列表,生成了一个子列表,然后在原始列表中增加一个元素,最后打印出原始列表和子列表的长度,大家想一下,这段程序什么地方会出现错误呢?
1700444418
1700444419 list. add(“D”)会报错吗?不会,subList并没有锁定原列表,原列表当然可以继续修改。
1700444420
1700444421 难道有两个size方法?正确,确实是size方法出错了,输出结果如下:
1700444422
1700444423 原列表长度:4
[ 上一页 ]  [ :1.700444374e+09 ]  [ 下一页 ]