实现List接口的集合类
特点:有序可重复
有序: 不是自然顺序, 而是添加进去的顺序
List接口中特有方法:
添加
add(int index, E element)
addAll(int index, Collection<? extends E> c)
获取:
get(int index)
indexOf(Object o)
lastIndexOf(Object o)
subList(int fromIndex, int toIndex)
修改:
set(int index, E element)
迭代
listIterator()
特点:方法参数都具有索引值,因为list接口的实现类下才具有索引值!!
重点看一下listIterator()方法。
其实很简单,。。。
就是 Iterator只能抓取下一个元素 即next ,单向移动指针
ListIterator可以双向移动指针。。并且有索引值。。。
所以可以
是否有下一个元素 抓取下一个元素 ,抓取下一个元素的索引值,
是否有上一个元素 抓取上一个元素 ,抓取上一个元素的索引值。
并且有remove (删除)和set(修改)作用于next或者previous作用的最后一个元素。。。。。。
注意ListIterator的add方法和ArrayList的add方法的不同之处
ListIterator: 将元素添加到当前指针所指位置,并且将指针下移一位
ArrayList: 将元素添加到容器末尾
所以在迭代的过程中不能运用集合对象改变对象中的元素个数,如果改变了就会抛出ConcurrentModificationException异常
迭代过程: 迭代器从创建开始 到使用结束的过程。
···········实现类ArrayList
其实是内部维护了一个Object[]数组,
特点: 查询速度快,增删慢。
使用无参构造函数时默认容量为10,长度不够用时自动增长0.5倍。查看源码可查:
特有方法:
void ensureCapacity(int minCapacity)
如有必要,增加此 ArrayList 实例的容量,以确保它至少能够容纳最小容量参数所指定的元素数。void trimToSize()
将此 ArrayList 实例的容量调整为列表的当前大小。
LinkedList实现类
显然是 内部维护了一个链表
特点: 查询速度慢,增删快。
void addFirst(E e) 将指定元素插入此列表的开头。
void addLast(E e) 将指定元素添加到此列表的结尾。
E getFirst() 返回此列表的第一个元素。
E getLast() 返回此列表的最后一个元素。
E removeFirst() 移除并返回此列表的第一个元素。
E removeLast() 移除并返回此列表的最后一个元素。
**栈专属:**
E pop() 从此列表所表示的堆栈处弹出一个元素。
void push(E e) 将元素推入此列表所表示的堆栈。
**队列专属:**
E poll() 获取并移除此列表的头(第一个元素)
boolean offer(E e) 将指定元素添加到此列表的末尾(最后一个元素)。
descendingIterator()
返回以逆向顺序在此双端队列的元素上进行迭代的迭代器。
Vector类 没人用的东西
线程安全,效率低
跟ArrayList一样
是 JDK1.0出现
ArrayList 是JDK1.2
迭代器不同:
Vector v =new Vector();
v.add("ads");
v.add("dsdas");
v.add("dsda3432s");
v.add("dsd34543654as");
Enumeration e =v.elements();
while(e.hasMoreElements())
System.out.println(e.nextElement());
}