集合框架
一、Map
映射表(也称为关联数组)的基本思想是它维护的是键-值(对)关联,因此你可以使用键来查找值。标准的java类库中包含了Map的几种基本实现。
HashMap
Map基于散列表的实现(它实现了HashTable)。插入和查询“键值对”的开销是固定的。可以通过构造器设置容量和负载因子。以调整容器的性能。
LinkedHashMap
类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一点;而在迭代访问时反而更快,因为它是用链表维护内部结构。
TreeMap
基于红黑树的实现。查看“键”或者“键值对”时,它们会被排序(次序由Comparable或Comparator决定)。TreeMap的特点在于,所得到的结果是经过排序的。TreeMap是唯一的带有subMap()方法的Map,它可以返回一个子树。
WeakHashMap
弱键(weak key)映射,允许释放映射所指向的对象;这是为解决某类特殊问题而设计的。如果映射之外没有引用指向某个“键”,则此“键”可以被垃圾回收器回收。
ConcurrentHashMap
一种线程安全的Map,它不涉及同步加锁。
IdentityHashMap
使用==替代equals()对“键”进行比较的散列映射。专为解决特殊问题而设计。
对Map中使用的键的要求与对Set中的元素的要求一样,任何键都必须具有一个equals()方法;如果键被用于散列Map,那么它必须还具有恰当的hashCode()方法;如果键被用于TreeMap,那么它必须实现Comparable。
有关java集合框架中各接口和类的具体实现方法可以参看以下文章,java集合框架,总结的很详细。
二、有关java集合框架的应用
以上只是简单的介绍了一下java容器的接口和实现类,下面我们通过几个具体的笔试题来深入了解一下java集合框架的使用。
1、java集合框架的层次结构
Collection接口:
Set接口:
HashSet具体类
LinkedHashSet具体类
TreeSet具体类
List接口:
ArrayList具体类
LinkedList具体类
向量类Vector具体类
Stack具体类
Map接口:
HashMap类
LinkedHashMap类
TreeMap类
三、正则表达式应用实例
校验是否全由数字组成
/^[0-9]{1,20}$/
校验登录名:只能输入5-20个以字母开头、可带数字、“_”、“.”的字串
/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$/
^[a-zA-Z]{1} 表示第一个字符要求是字母。
([a-zA-Z0-9]|[.]){4,19}表示从第二位开始(因为它紧跟在上个表达式后面)的一个长度为4到9位的字符串,它要求是由大小写字母、数字或者特殊字符集[.]组成。
异常抛出
- package com.lz.ctsframework.core.support;
- import java.text.MessageFormat;
- /**
- *
- * <b>类说明:</b>Service层统一抛出的异常
- *
- * <p>
- * <b>详细描述:</b>
- *
- * @author liuhuanchao
- * @since 2016-04-18
- */
- public class ServiceException extends RuntimeException {
- private static final long serialVersionUID = 6514891174875747380L;
- /** 异常错误码 **/
- private String code;
- /** 异常描述 **/
- private String msg;
- /** 扩展异常描述(包括msg) **/
- private String extMsg;
- /**
- * ServiceException构造方法,有format字符组
- * @param errorCode 错误码
- * @param param format字符组
- * @param extMsg 扩展信息,给出具体的错误值信息等
- */
- public ServiceException(ErrorCode errorCode,String param[],String ... extMsg) {
- super(==errorCode ? "" : errorCode.getCode());
- init(errorCode, param,extMsg);
- }
- /**
- * ServiceException构造方法,有format字符组
- * @param errCode
- * @param paramsList
- */
- public ServiceException(ErrorCode errCode, Object... paramsList) {
- Object[] params = ;
- if ((paramsList != null) && (paramsList.length > 0)
- && ((paramsList[(paramsList.length - 1)] instanceof Throwable)))
- {
- Object[] newParam = new Object[paramsList.length - 1];
- System.arraycopy(paramsList, 0, newParam, 0, newParam.length);
- params = newParam;
- super.initCause((Throwable)paramsList[(paramsList.length - 1)]);
- }
- else {
- params = paramsList;
- super.initCause(null);
- }
- this.code = ==errCode ? "" : errCode.getCode();
- this.msg = ==errCode ? "" : MessageFormat.format(errCode.getMsg(),params);
- this.extMsg = this.msg;
- }
- private void init(ErrorCode errorCode, String param[], String... extMsg) {
- this.code = ==errorCode ? "" : errorCode.getCode();
- this.msg = ==errorCode ? "" : MessageFormat.format(errorCode.getMsg(),param);
- StringBuilder builder = new StringBuilder(100);
- builder.append(this.msg);
- if(null != extMsg){
- for(String ext : extMsg ){
- builder.append("[").append(ext).append("]");
- }
- }
- this.extMsg = builder.toString();
- }
- /**
- *
- * @param code 错误码
- * @param msg 描述信息
- */
- public ServiceException(String code, String msg) {
- super(code+":"+msg);
- this.code = code;
- this.msg = msg;
- }
- /**
- * 带Exception的构造方法,传format字符数组
- * @param errorCode 错误码基类
- * @param e 异常
- * @param extMsg 扩展信息,给出具体的错误值信息等
- */
- public ServiceException(ErrorCode errorCode, Throwable e,String param[] , String ...extMsg ) {
- super(==errorCode ? "" : errorCode.getCode(), e);
- init(errorCode, param, extMsg);
- }
- /**
- *
- * @param code 错误码
- * @param msg 描述信息
- * @param e 异常
- */
- /*public ServiceException(String code, String msg,Throwable e) {
- super(code+":"+msg, e);
- this.code = code;
- this.msg = msg;
- }*/
- /**
- *
- *
- * 方法说明:异常错误码
- *
- * @return
- */
- public String getCode() {
- return code;
- }
- /**
- *
- *
- * 方法说明:异常描述信息
- *
- * @return
- */
- public String getMsg() {
- return msg;
- }
- public String getExtMsg() {
- return extMsg;
- }
- @Override
- public String getMessage() {
- return super.getMessage() + ","+extMsg;
- }
- public static void main(String[] args) {
- }
- }