臧克家
. . .
人生永远追逐着幻光,
但谁把幻光看作幻光,
谁便沉入了无底的苦海。
臧克家
. . .
人生永远追逐着幻光,
但谁把幻光看作幻光,
谁便沉入了无底的苦海。
平时我们在对集合或数组排序时,会碰到Comparable和Comparator这两个很类似的接口,它们以不同的方式实现了元素的排序功能,今天我们就来谈谈这两个接口的区别,并介绍下Java排序一些常见方法的使用。
首先介绍一下Comparable与Comparator的区别。
Comparable是排序接口,若一个类实现了Comparable接口,该类的对象就支持排序;
而Comparator是比较器接口,我们可以实现一个Comparator接口(一般采用匿名内部类的写法),定义一种对A类的排序规则,而不需要对A类做任何改变。
所以,Comparable相当于内部比较器,而Comparator相当于外部比较器。
下面列出集合排序时一些常用的方法:
可以发现有的排序方法要求提供Comparator接口作为参数,有些则没有要求;
若提供了Comparator接口,则集合的元素无需实现Comparable接口,若元素没有实现Comparable接口,则需要提供Comparator接口。
所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系,而不是传统的手动去控制对象的创建。
从配置上来说,相当于把代码中的依赖关系转移到xml配置文件中。
优点:通过使用IOC,再加上Spring提倡的面向接口编程,能很大程度实现组件之间的解耦,利于功能复用,最终提高了项目整体的灵活性和可维护性。
DI(依赖注入)其实就是IOC的另外一种说法,IoC容器动态的向某个对象提供它所需要的其他对象。
AOP:Aspect Orient Programming,面向切面编程;用来处理具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等。
使用场景:
AOP分类:
基本概念:
一级缓存是Session级别的缓存(即当前Session有效),默认启用。
一级缓存的key为ID(主键)。
当执行load/get/list/iterator/save/update/saveOrUpdate等方法时会把得到的实体对象放入一级缓存中(只支持实体对象缓存,不支持属性的缓存),之后在同一个session范围内执行load/get/iterator等查询语句(不包括list)查询缓存过的数据时,Hibernate不会去数据库中查询。
当程序保存或修改实体时,不会立即同步到数据库,而是保存在一级缓存中,只有程序显示调用Session的flush()或close()方法才会刷新至数据库,这样可以减少数据库的交互,提高数据库的访问性能。
一级缓存清除方法:
使用场景:
优势:
写法:
第一种:饿汉式,线程安全
1 | public class Singleton { |