1、什么是集合:对象的容器,定义了对多个对象进行操作的方法。
2、数组和集合的区别
数组的长度是固定的。集合长度不固定
数组可以存储基本类型和引用类型,集合只能存储引用类型数据。
3、Collection是体系的父接口,List和set是子接口。
4、List是有序,有下标,可以有重复数据的
Set是无序,无下标,不能有重复数据的
5、List有ArrayList、Vector、LinkedList这三种类型
ArrayList:数据结构实现,查询快,增删慢,运行效率快,线程不安全
LinkedList:链表结构实现,查询慢,增删快
6、ArrayList和LinkedList关于操作数据的方法
添加:add()
删除:remove()
清空:clear()
元素个数:size()
输出数据:toString()
判断是否包含某个元素:contains()
是否为空:isEmpty()
判断是否相等:equals()
遍历:方法一:增强for
方法二:普通for
方法三:迭代器
方法四:列表迭代器
7、ArrayList代码演示(LinkedList相同)

public class TestArrayList {
    public static void main(String[] args) {
        //创建集合
        ArrayList students=new ArrayList();
        Student s1=new Student("思凡", 18);
        Student s2=new Student("铸玺", 19);
        Student s3=new Student("淘淘", 17);
        //1添加
        students.add(s1);
        students.add(s2);
        students.add(s3);
        //判断元素个数
        System.out.println("元素个数:"+students.size());
        //打印数据
        System.out.println("打印元素:"+students.toString());
        //2删除
        students.remove(new Student("思凡", 18));
        System.out.println("删除:"+students.size());
        //3遍历
        //3.1 增强for
		for(Student s:studetns){
	    	System.out.println(s.toString());
		}
        //3.2 for
		for(int i=0;i<students.size();i++){
		    System.out.println(s.get(i));
		}
        //3.2 迭代器
        Iterator it = students.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
        //3.4 列表迭代器
        System.out.println("------从前往后--------")
        ListIterator listIterator = students.listIterator();
        while (listIterator.hasNext()){
            System.out.println(listIterator.nextIndex()+"---"+listIterator.next());
        }
        System.out.println("------从后往前--------")
        ListIterator lit=students.listIterator(students.size());
        while(lit.hasPrevious()){
            System.out.println(lit.previousIndex()+"---"+lit.previous());
        }
        //4判断
        System.out.println(students.contains(s1));
        //5获取位置
        System.out.println(students.indexOf(s2));
    }
}

8、ArrayList源码分析
源码分析:

  • (1)调用无参构造方法创建ArrayList集合,长度是 size=0,elementData 存储元素的数组
  • (2)当添加第一个元素时,容量扩充为10,每次扩容大小都是原来的1.5倍
  • (3)remove方法使用System.arrayCopy实现移动,效率高
  • (4)迭代器中有一个cursor,获取一个元素后,cursor+1,如果cursor==size,不能获取
    9、LinkedList源码分析
    源码分析:
  • (1)构造没有任何操作,属性size=0 元素个数, head 头节点 last 最后一个节点
  • (2) 静态内部类 Node 属性 item:数据 next:下一个元素 prev:上一个元素
  • (3) add方法中每添加都会形成一个节点,fist属性指向第一个元素,last指向最后一个元素,每个节点都有前驱和后继
    10、ArrayList和LinkedList区别:
  • ArrayList的存储结构是数组,LinkedList存储结构式双向链表
  • ArrayList的查找遍历比较快,插入和删除相对较慢,因为使用本地方法优化,并不一定比LinkedList慢
  • LinkedList的插入和删除比较快,查找遍历较慢。