Collection 接口:单列集合,用来存储一个一个的对象=====List 接口:存储有序可重复的数据========ArrayList:List 接口的主要实现类,效率高但线程不安全,底层使用Object[] elementData存储(底层数组)========linkedList:(底层使用双向链表)。对于频繁的删除、插入操作使用他效率更高========Vector:List 接口的古老实现类,效率低但线程安全,底层使用Object[] 存储*(即便涉及到线程安全问题也几乎用不到,)
三者异同
同:存取有序重复的数据
不同:
2、ArrayList 源码分析
jdk 7
ArrayList arrayList1 = new ArrayList();
//底层创建了长度是10 的Object[] 数组的elementData
arrayList1.add(123);如果此次添加导致底层数容量不够,则扩容
默认情况下扩容为原来的1.5倍,同时需要将原来数组中的数据复制到新数组中
结论:建议开发是使用:ArrayList arrayList2 = new ArrayList(40);
jdk 8
ArrayList arrayList1 = new ArrayList();
//底层初始化为Object[] EMPTY_ELEMENTDATA = {};并没有创建数组(申请内存)
arrayList1.add(123); //第一次调用add()时,底层才创建长度为10的数组,并将数据添加到数组中。
后续和JDK 7 一样
结论:jdk 8 类似于单例模式的懒汉式。
3、linkedList 源码分析底层是一个双向链表。
4、List 接口中常用方法 @Test
//List的测试学习
public void test2(){
ArrayList arrayList1 = new ArrayList();
ArrayList arrayList2 = new ArrayList(40);
arrayList2.add(158);
arrayList2.add(897);
linkedList linkedList = new linkedList();
//底层创建了长度是10 的Object[] 数组的elementData
arrayList1.add(123);
arrayList1.add("werq");
arrayList1.add(new Person());
arrayList1.add(new Person("Tom","程序员",23));
System.out.println("arrayList1长度为:"+arrayList1.size());
arrayList1.addAll(arrayList2);
System.out.println("arrayList1长度为:"+arrayList1.size());
Iterator iterator = arrayList1.iterator();
System.out.println("遍历结果为:");
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
@Test
//List的测试学习
public void test2(){
ArrayList arrayList1 = new ArrayList();
ArrayList arrayList2 = new ArrayList(40);
arrayList2.add(158);
arrayList2.add(897);
linkedList linkedList = new linkedList();
//底层创建了长度是10 的Object[] 数组的elementData
arrayList1.add(123);
arrayList1.add("werq");
arrayList1.add(new Person());
arrayList1.add(new Person("Tom","程序员",23));
System.out.println("arrayList1长度为:"+arrayList1.size());
arrayList1.addAll(arrayList2);
System.out.println("arrayList1长度为:"+arrayList1.size());
Iterator iterator = arrayList1.iterator();
System.out.println("遍历结果为:");
while (iterator.hasNext()){
System.out.println(iterator.next());
}
System.out.println("**********************");
System.out.println(arrayList1.subList(1,5));
System.out.println( arrayList1.isEmpty() );
//int indesOf(Object obj):返回在集合中首次出现的位置
//lastIndexOf(Object obj):返回在集合中首次出现的位置
//Object remove(int index):移除指定index位置的元素,并返回次元素
//Object set(int index,Object ele):设置指定位置的元素为ele
//
}



