线程集合
synchronized 与 Lock 的对比

面试题:Java是如何解决线程安全问题的?有几种方式?对比几种方式的不同。day18
面试题:synchronized和lock线程安全性对比。
面试题:写一个线程安全的单例模式
面试题:sleep和wait的异同


面试题:List集合
* 1、List接口框架 * Collection接口:单列集合,用来存储一个一个的对象 * * List接口:存储有序的,可重复的数据。——>“动态”数组 * * ArrayList:作为List接口的主要实现类,线程不安全,效率高,底层使用Object[] elementValue存储 * LinkedList:对于频繁的插入、删除操作,使用此类效率比ArrayList高。底层使用双向链表存储 * Vector:作为List接口的古老实现类,线程安全的,效率低。底层使用Object[] elementValue存储 * 2、ArrayList源码分析 * ArrayList的源码分析:jdk7和jdk8稍微不同 * 2、1 jdk7的情况下: * ArrayList list = new ArrayList(); //底层创建了长度为10的Object[]数组elementDate * list.add(123);//elementData[0] = new Integer(123); * ... * list.add(11);//如果此次的添加导致底层elementData容量不够,则扩容 * 默认情况下,扩容为原来容量的1.5倍,同时需要将原有数组中的数据赋值到新数组中。 * * 结论:建议开发中使用带参数的构造器ArrayList list = new ArrayList(int capacity) * 2、2 jdk8中的情况: ArrayList的变化 * ArrayList list = new ArrayList(); //底层Object[] elementData初始化为{},并咩有创建长度为10的数组 * list.add(123);//第一次调用add()时,底层才创建了长度为10的数组,并将数据123添加到elementData中 * ... * 后续的扩容操作与jdk7相同。 * 2、3 小结:jdk7中的ArrayList的对象的创建类似于单例模式中的饿汉式。 * 而jdk8中的ArrayList的对象的创建类似于单例模式中的懒汉式,延迟了数组的创建,节省内存。 * * 3、LinkedList的源码分析 * LinkedList list = new LinkedList();//内部声明了一个Node(结点类)类型的first和last属性,默认值为null * list.add(123);//将123封装到Node中,创建了Node对象 * * 其中Node定义为: 体现了LinkedList的双向链表特性。 * private static class Node<E>{ * E item; * Node<E> next; * Node<E> prev; * * Node(Node<E> prev, E element, Node<E> next){ * this.item = element; * this.next = next; * this.prev = prev; * } * } * * 4、Vector的源码分析,jdk7和jdk8中通过Vector()构造器创建对象时,底层创建了长度为10 的Object[]数组 * 在扩容方面扩容为原来的2倍 区别于ArrayList * * 面试题:ArrayList LinkList Vector的异同 * 同:三个类都实现了List接口,存储数据的特点相同:存储有序的,可重复的数据 * 不同:见上
面试题:Collection和Collections区别

浙公网安备 33010602011771号