1.Objects类中方法( Objects.requireNonNull(T obj))用于验证一个对象是否为空,为空则抛出空指针异常。方法checkIndex(index, size);用于验证index是否越界。
2.A instanceof B ,返回值为boolean类型,用来判断A是否是B的实例对象或者B子类的实例对象。如果是则返回true,否则返回false。
3.java (o==null ? e==null :o.equals(e)),含义:如果o为null,--〉如果e为null,返回为true,否则false;如果o不为null,--〉则返回o.equals(e)-->也就是如果o和e对象equal,返回true,否则false。
4.AbstractList类中hashcode的计算方式:hashCode = 31 * hashCode + (e == null ? 0 : e.hashCode());为什么要加31,要加的话为什么是31。详见http://blog.csdn.net/steveguoshao/article/details/12576849
5.serialVersionUID和关键字Transient。
serialVersionUID适用于Java的序列化机制。
Transient 关键字的作用是控制变量的序列化,在变量声明前加上该关键字,可以阻止该变量被序列化到文件中,在被反序列化后,transient 变量的值被设为初始值,如 int 型的是 0,对象型的是 null。
详见https://www.cnblogs.com/duanxz/p/3511695.html
6.ArrayList中另数组容量增长时,使用的运算是newCapacity = oldCapacity + (oldCapacity >> 1);将oldCapacity 右移一位,其效果相当于oldCapacity /2,位运算的速度远远快于整除运算,整句运算式的结果就是将新容量更新为旧容量的1.5倍。
7.ArrayList中的方法public E set(int index, E element),之前使用都是将其作为覆盖方法使用的,现在看来它是一个置换方法,可以得到置换前index位置的oldValue。
8.ArrayList中继承并使用了父类的字段modCount,在使用add和remove时都将modCount的值加一,这个值终于在ArrayList的迭代器中用到了,用于检查线程的一致性。
9.ArrayList中的子类SubList在需要取出集合中的一部分时,可以被使用。方法是List<E> subList(int fromIndex, int toIndex);父子list做的非结构性修改(non-structural changes)都会影响到彼此,即不涉及到list的大小改变的修改。而结构性修改,子list的所有操作都会反映到父list上。但父list的修改将会导致返回的子list失效。
10.i++和++i对于i值的的修改一致。但a=i++;和a=++i对于a值得修改不一致。前者为a=i,后者为a=i+1。