集合ArrayList和LinkedList都实现了List接口。
List接口继承了Collection接口,因此ArrayList和LinkedList都有基本的方法:
add(E e),remove(Object o),iterator()…
此外List还声明了一个特有的迭代器方法——listIterator()。
ListIterator()方法返回一个ListIterator迭代器,它与Iterator不同点在与ListIterator可以反向遍历,可以用previous() 和hasPrevious()实现反向遍历。
List<Integer> list = new LinkedList<Integer>();
for(int i=0;i<10;i++) {
list.add(i);
}
ListIterator<Integer> iterator= list.listIterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
while (iterator.hasPrevious()) {
System.out.println(iterator.previous());
}
这里反向遍历并不是指一开始就可以从集合尾部向前遍历,而是指迭代器正反向移动。next()和previous()可以交替使用但要注意迭代器的位置和要返回的值,迭代器绕过谁就返回谁(不懂可看https://blog.youkuaiyun.com/qq_42650817/article/details/97945752)。
ArraryList:
ArrayList可认为是一个动态数组。
ArrayList有3个构造器。
ArrayList(int init);
ArrayList();
ArrayList(Collection <? extends E> c);
ArrayList()构造一个默认初始容量为10的空列表。
ArrayList(int init)构造一个指定初始容量的空列表。
ArrayList(Collection <? extends E> c)构造一个包含指定collection的列表。
当添加元素大于目前列表容量时,ArrayList会自动扩容,大约为1.5倍。因此当知道要添加元素的数量时,必须要指定列表的初始量,不然可能会造成巨大的内存浪费。
ArrayList底层是用数组存储的,因此ArrayList可以提供高效的随机访问,但要往其中插入或删除元素的效率就很底。
LinkedList:
LinkedList是一个双向链表结构的集合。
它可以很轻松的对集合进行插入和删除,但随机访问效率底。
当你需要实现List时,如果只需要进行随机访问可以用ArrayList,如果要对集合的内容进行操作那么就要选择LinkedList。如果数据量不多这两都差不多。