打字猴:1.70044446e+09
1700444460
1700444461 public static void main(String[]args){
1700444462
1700444463 List<String>list=new ArrayList<String>();
1700444464
1700444465 List<String>subList=list.subList(0,2);
1700444466
1700444467 //设置列表为只读状态
1700444468
1700444469 list=Collections.unmodifableList(list);
1700444470
1700444471 //对list进行只读操作
1700444472
1700444473 doReadSomething(list)
1700444474
1700444475 //对subList进行读写操作
1700444476
1700444477 doReadAndWriteSomething(subList)
1700444478
1700444479 }
1700444480
1700444481 这在团队编码中特别有用,比如我生成了一个List,需要调用其他同事写的共享方法,但是有一些元素是不能修改的,想想看,此时subList方法和unmodifiableList配合着使用是不是就可以解决我们的问题了呢?防御式编程就是教我们如此做的。
1700444482
1700444483 这里还有一个问题,数据库的一张表可以有很多视图,我们的List也可以有多个视图,也就是可以有多个子列表,但问题是只要生成的子列表多于一个,则任何一个子列表就都不能修改了,否则就会抛出ConcurrentModificationException异常。
1700444484
1700444485 注意 subList生成子列表后,保持原列表的只读状态。
1700444486
1700444487
1700444488
1700444489
1700444490 编写高质量代码:改善Java程序的151个建议 [:1700438144]
1700444491 编写高质量代码:改善Java程序的151个建议 建议73:使用Comparator进行排序
1700444492
1700444493 在项目开发中,我们经常要对一组数据进行排序,或者升序或者降序,在Java中排序有多种方式,最土的方法就是自己写排序算法,比如冒泡排序、快速排序、二叉树排序等,但一般不要自己写,JDK已经为我们提供了很多的排序算法,我们采用“拿来主义”就成了。
1700444494
1700444495 在Java中,要想给数据排序,有两种实现方式,一种是实现Comparable接口,一种是实现Comparator接口,这两者有什么区别呢?我们来看一个身边的例子,就比如给公司职员排序吧,最经常使用的是按照工号排序,先定义一个职员类代码,如下所示:
1700444496
1700444497 class Employee implements Comparable<Employee>{
1700444498
1700444499 //id是根据进入公司的先后顺序编码的
1700444500
1700444501 private int id;
1700444502
1700444503 //姓名
1700444504
1700444505 private String name;
1700444506
1700444507 //职位
1700444508
1700444509 private Position position;
[ 上一页 ]  [ :1.70044446e+09 ]  [ 下一页 ]