Java中数组存储数据具有局限性,我们通常用List替代数组
1.List集合类中元素有序,且可重复(有序:按添加的顺序)
2.ArrayList、 LinkedList、Vector三种实现类
ArrayList.、LinkedList.、Vector的使用:
ArrayList的源码分析:
①jdk.7情况下:
ArrayList list=new ArrayList();//底层创建了长度为10的object[]数组list.add (123) //elementDate(0]= new Integer (123);...list.add (11);// 如果此次添加导致数组容量不够,则扩容。扩容为原来的1.5倍,并将数据复制到新的数组中//开发中建议使用带参构造器(可指定长度)Arruy List list = new ArrayList (int capacity);
②jdk8情况下:
Array List list =new ArrayList()://底层object [] JelementDate.初始化为{};并没有创建数组。list.add(123);//第一次调用add()时,底层才创建了长度为10的数组,并将123添加进数组中。//后续的添加和扩容与jdk7相同
小结:idk7中的创建类似于单例的饿汉式,而jdk8中的创建类似于懒汉式。延迟了数组的创建,节省内存。
LinkedList的源码分析:(双向链表)ffirst listI last
Linked List list=new Linked List();//内部声明了Node类型的firse和last属性,默认值为null.
list.add(123);//将123封装到Node中,创建了Node对象
Vector的源码分析
jdk7和8都创建了长度为10的数组,在扩容方面,默认扩容为原来的数组的2倍。
ArrayList::list的主要实现类,线程不安全,效率高。
Linked list:对于频繁的插入、删除比Arraylist效率高
Vector: list的古老实现类、线程安全,效率低。