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
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 ]
[
下一页 ]