java
0 篇文章
ArrayList 源码分析 1.概览 publicclassArrayListextendsAbstractListimplementsList,RandomAccess,Cloneable,java.io.Serializable 实现了 RandomAccess 接口,也就是说支持随机访问,因为 ArrayList 是基于数组实现的。实际上查看 RandomAccess 的实现发现为空实现标记接口。文档提及,如果
概览容器主要包括 Collection 和 Map 两种,Collection 又包含了 List、Set 以及 Queue。Collection1.Set-HashSet:基于哈希实现,支持快速查找,但不支持有序性操作,例如根据一个范围查找元素的操作。并且失去了元素的插入顺序信息,也就是说使用 Iterator 遍历 HashSet 得到的结果是不确定的。-TreeSet:基于红黑树实现,支持有序性操作,但是查找效率不如
观察者模式分离了观察者和被观察者自身的责任,让类各自维护自己的功能,提高了系统的可重用性。怎么做?通过使用 JDK 中提供的{@linkjava.util.Observable}以及{@linkjava.util.Observer}这两个类即可完成简单的观察者模式。代码示例:importjava.util.Observable;importjava.util.Observer;/***通过使用 JDK 中提
工厂模式(FactoryPattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。代码示例:接口 publicinterfaceChannelService{voidwechat();voidalipay();}具体的接口实现类 publicclassAchannelServ
装饰器模式(DecoratorPattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。怎么做?新建一个类,该类耦合了需要装饰的类,将实现传递进来,保证原有功能的完整性。为了表明该类是某接口的包装类,所以一般声明为 abstract 类
单接口适配器模式是为了让子类实现时屏蔽掉不关心的方法,在子类、适配器、接口之间做一次过渡。比如子类想实现接口中某一个方法,但是接口中方法不止一个,此刻编译器强制子类必须实现该接口的所有方法,这显然是麻烦、不必要且不优雅的。那么此时选择单接口适配器模式则是一种解决方案。怎么做?其实特别简单:就是写一个类,实现某接口,给出默认实现。其实在 JDK8 的语法中已经给出了默认实现的方式,就是使用 default 关
单例模式的理论就不再描述了以下对自己喜欢的单例模式写法做个总结说明:常见实现常见的单例模式写法有多种,甄选之后比较喜欢如下两种:静态内部类枚举静态内部类来一段静态内部类实现 spring 容器启动器的代码,如何风骚的初始化 spring 容器。publicclassBootstrap{privatestaticfinalLoggerlogger=LoggerFactory.getLogger(Bootstr
记录 Spring 相关工具类。1.方便的获取容器中的 Bean/***{@linkorg.springframework.context.ApplicationContext}包装类,方便获取容器中的 Bean*<p> 注意:需要在容器中注册后方可使用*@authorpleuvoir**/publicclassApplicationContextWrapimplementsApplicationContex
记录一下 logback 的配置,方便以后 copypaste1.maven 坐标 <properties><slf4j.version>1.7.19</slf4j.version><logback.version>1.1.3</logback.version></properties><!--日志--><dependency><groupId>org.slf4j</groupId><artifactId>s
1.maven 配置 2.通过 maven 下 Jar 包源码选中项目右键 run->Mavenbuild...Goals 中输入 dependency:sources,注意项目不要选错然后点 run,查看 console 等待 maven 下载完毕项目中所有引用的 jar 包即可。
Java-8-TutorialsforEachmap//1.7Map<String,Object>map=newHashMap<>();map.put("A","map-A");map.put("B","map-B");map.put("C","map-C");map.put("D","map-D");for(Entry<String,Object>entry:map.entrySet()){Sys
1.何时会初始化类?主动 new 调用类的静态方法操作类或接口的静态属性或者为其赋值反射操作指定一个类作为 Java 虚拟机启动时的初始化类。初始化一个类的子类同样会初始化它的父类以上均为初始化类的手段。2.加载顺序是什么?创建两个类:父类 Parent,子类 Child 继承父类 Parent 用于演示初始化子类时对父类的影响。publicclassParent{staticStringparenntName="P