既让list底层是通过数组实现的,而数组又是定长,那么list是如何实现扩容的呢? **先从添加数据的add()方法入手,可以看到在新增元素前会调用一个ensureCapacityInternal()的函数对数组容量进行判断。 使用原数组长度+1 ** public boolean add(E e)
mybatis中Mapper传参问题 传递单值 不带If判空处理的 //DAO List<SystemIndustry> findALlResult(String industryId); //XML <select id="findALlResult" resultMap="SystemIndus
Lambda表达式 ()->{} 通过接口函数来简化匿名内部类的写法,如下。 /**<h1>无参写法</h1>*/ //jdk7 写法 new Thread(new Runnable() { @Override public void run() { System.o
JAVA中隐藏与覆盖 覆盖:子类重写父类的方法,要求方法名和参数类型完全一样(参数不能是子类),返回值和异常比父类小或者相同(即为父类的子类),访问修饰符比父类大或者相同。 隐藏:父类和子类拥有相同名字的属性或者方法( 方法隐藏只有一种形式,就是父类和子类存在相同的静态方法)时,父类的同名的属性或者
HashMap中put方法分析 put方法 public V put(K key, V value) { return putVal(hash(key), key, value, false, true); } hash方法 static final int
在理解扩容器前得先明白HashMap中几个常量的含义 //默认初始容量 ,必须为二的次幂 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 //最大容量 static final int MA
HashMap扩容导致死链问题 分析造成原因: *当新增后的链表length大于Load factor(负载因子)length时hashMap会就行重新扩容、位置进行rehash计算,当然在单线程的情况下扩容不会出现问题,真正出现问题是在多线程情况下,同时进行扩容,链表会形成环,这就导致了死链的问题
校验注解 使用方法: **在需要进行校验的实体前加上 **@Valid 在需要进行校验的字段上进行对应校验 常用校验有: @AssertTrue / @AssertFalse 验证适用字段:boolean 注解说明:验证值是否为true / false @DecimalMax / @Decima
线程五个状态 新建状态(NEW),当程序使用new关键字创建了一个线程之后,该线程就处于新建状态,此时仅由JVM为其分配内存,并初始化其成员变量的值。 就绪状态(RUNNABLE),当对象待用了start()方法之后,该线程就处于就绪状态。Java虚拟机会为其创建方法调用栈和程序计数器,等待调度运行
在List中有一个独立的接口:RandomAccess接口,Vector和ArrayList实现了该接口,而LinkedList却未实现该接口。查看该接口源码发现这居然是一个空的接口。 public interface RandomAccess { } 那么这个空接口起到了什么作用呢? 该接口的注