一:集合体系图
二:LIst集合
按顺序存放元素,元素可以重复(可以存放null值)
实现类:
ArrayList:数组实现,查询快,增删慢,轻量级;(线程不安全)
LinkedList:双向链表实现,增删快,查询慢 (线程不安全)
Vector:数组实现,重量级 (线程安全、使用少)
三:List集合的基本操作
int size()//返回集合的长度
boolean isEmpty();//集合是否为空
boolean contains(Object o);//如果此列表包含指定的元素,则返回 true。
boolean add(E e);//增加元素
boolean remove(Object o);//删除元素
E get(int index);//获得指定位置上的元素
int indexOf(Object o);//返回此列表中指定元素最后一次出现的索引,如果此列表不包含该元素,则返回 -1
Iterator<E> iterator()//返回一个迭代器
四:List集合的实现类
1.ArrayList:底层采用Object数组实现,查询速度快,增删速度慢的特点。 2.实现了四个接口 ①:List接口:得到了List接口框架基础功能。 ②:RandomAccess接口,获得了快速随机访问存储元素的功能, ③:Cloneable,得到了clone()方法,可以实现克隆功能; ④:Serializable,表示可以被序列化,通过序列化去传输,典型的应用就是hessian协议。
3.ArrayList集合自动扩容机制 无参构造器创建出的ArrayList的初始容量为10
①:确保内部容量,看如果需要扩容,则扩容。 ②:如果数组的长度小于需要的最小容量就扩容 ③:扩容 可以看到扩容的是1.5倍 这里增加了对元素个数的最大个数判断,MAX_ARRAY_SIZE 为int最大值减去8 2.LinkedList集合 ①:LinkedList底层通过链表来实现,随着元素的增加不断向链表的后端增加节点。LinkedList是一个双向链表,每一个节点都拥有指向前后节点的引用。相比于ArrayList来说,LinkedList的随机访问效率更低。 ②:继承了AbstractSequentialList,实现了List, Deque, Cloneable, Serializable接口。 ③:在LinkedList中,内部类Node对象最为重要,它组成了LinkedList集合的整个链表,分别指向上一个点、下一个结点,存储着集合中的元素。成员变量中,first表明是头结点,last表明是尾结点 ④:add增加操作 可以简单概括为以下几点。 1,将添加的元素转换为LinkedList的Node对象节点。
2,增加该Node节点的前后引用,即该Node节点的prev、next属性,让其分别指向哪一个节点)。
3,修改该Node节点的前后Node节点中pre/next属性,使其指向该节点。
⑤:remove操作
3.Vector集合 Vector是线程安全的,所以速度慢,已经被ArryList所取代。 五:ArrayLsit集合和LinkedLIst集合的区别
|