List接口:允许数据重复 在进行单个集合处理时,优先考虑List接口
- Java类集:数据结构、多线程——动态数组(当元素个数达到最大值时,动态增加容量)(解决数组长度固定问题)
- 在List接口中,拓展了两个重要的方法()
- 1、public E get(int index):根据索引下标取得数据
- 2、public E set(int index,E element):根据索引下标更新数据,返回修改之前的数据
- 在List接口下有三个常用子类:ArrayList、Vector、 LinkedList。这三个子类在使用上没有任何区别。
- public abstract class ArrayList、Vector、 LinkedListAbstractList<E> extends AbstractCollection<E> implements List<E>
- public class ArrayList<E> extends AbstractList<E>
- public class Vector<E> extends AbstractList<E>
- 在List接口中,拓展了两个重要的方法()
implements List<E>,RandomAccess,Cloneable,java.io.Serializable
public class LinkedList<E> extends AbstractSequentialList<E>
implements List<E>,Deque<E>,Cloneable,java.io.Serializable
- AbstractList类的作用是统一覆写ArrayList、Vector、 LinkedList三个类需要的方法
List:[3, 5, 0]------------>list.set(1,90)--->返回5------->得到[3, 90, 0]
List:[1, 3, 5, 0]----------->list.remove(0)------->返回1------->得到[3, 5, 0]
list.contains(o)----->判断是否包含指定元素---->o==null--->有元素为null则为true
o!=null----->为object的equals方法,比地址
所以自定义类要使用List的contains、remove方法该类必须要覆写equals方法来使用contains、remove
ArrayList、Vector、 LinkedList的区别
1、ArrayList与Vector的区别
答:ArrayList使用最多的子类。使用上没有区别,因为都用的时List的接口,这三个类都是List的子类
1.1、出现版本:
ArrayList是JDK1.2
Vector是JDK1.0(出现在List、Collection接口之前)
1.2、初始化策略区别:调用无参构造时:
Vector在午餐构造执行后,将对象数组大小初始化为10
ArrayList采用懒加载策略,在构造方法阶段并不初始化对象数组,在第一次添加元素时才初始化数组,大小为10,ArrayList扩容时,变为原来的1.5倍,将原来的数组内容拷贝一份,仍到新的里面。
1.3、扩容策略
ArrayList:int newCapacity = oldCapacity + (oldCapacity>>1);变为原来的1.5倍
vector:int newCapacity = oldCapacity +
((capacityIncrement > 0) ? capacityIncrement : oldCapacity );
变为原来的2倍
1.4、线程安全性
ArrayList采用异步处理,线程不安全,效率较高
Vector采用在方法上加锁,线程安全,效率较低(即便要使用线程安全的List,也不用Vextor)
1.5、遍历
Vector支持较老的迭代器:Enumeration()
ArrayList不支持
2、ArrayList与Vector的共同点
答:底层均使用数组实现
3、ArrayList与LinkedList的区别
答:ArrayList底层采用数组实现
LinkedList底层双向链表实现,异步