两种类型的List:
ArrayList:它长于随机访问元素,但是在List的中间插入和移除元素时比较慢。
|-用contains()方法来确定对象是否在列表中。
|-若移除一个对象,则可以将这个对象的引用传递给remove()方法。
|-indexOf()方法返回查询对象在List中的位置(从零开始),不存在的话返回-1。
|-subList()方法允许你很容易的从较大的列表中创建出一个片段,其中两个参数start,end,截取的是从start到end-1。
|-retainAll()方法是一个有效地交集操作
LinkedList:它通过较低的代价在List中间进行插入和删除的操作,提供优化的顺序访问,LinkedList在随机访问上相对较慢。
他在执行某些操作时比ArrayList更高效,但是在随机访问对象是就要比ArrayList逊色一些。
|-getFirst(),element()完全一样,返回列表的头(第一个元素),但是并不移除。如果List为空,则抛出NoSuchElementException。peek()方法与上述两个方法的唯一差异就是List为空时返回null。
|-removeFirst()和remove()也是完全一样,他们移除并返回列表的头,如果List为空则返回NoSuchElementException。poll()稍有差异,当列表为空时返回null。
|-addFirst(),add()和addLast()相同,他们都将某个元素插入到列表的尾部。
|-removeLast()移除并返回列表的最后一个元素。
迭代器:
|-使用方法Iterator()要求容器返回一个Iterator。Iterator将准备好返回序列的第一个元素。
|-使用next()获得序列的下一个元素。
|-使用hasNext()检查序列中是否还有元素。
|-使用remove()将迭代器新近返回的元素删除。
有了Iterator就不必为容器中的元素的数量操心了,那是由hasNext()和next()关心的事情。
如果你只是向前遍历List,并不打算修改list本身,那么使用foreach()语法会变得更加简洁。
Iterator还可以移除由next()产生的最后一个元素,这意味着在调用remove()之前必须先调用next()。
注意:其实迭代器最大的好处并不是用来访问容器中的对象(因为for和foreach会做的更好,更简单),其最大的好处是用来统一对容器的访问方式。(因为所有容器都可以通过iterator()方法的到迭代对象。)
ListIterator
她是一个更加强大的Iterator的子类型,她只能用于各种List的访问,尽管Iterator只能先前移动,但是ListIterator可以双向移动。
|-创建listIterator对象:ListIterator it= pets.listIterator() ;
|-得到当前位置的前一个和后一个的索引:it.nextIndex(),it.previousIndex()。得到引用:it.next(),it.previous()(也可以在.id()得到索引)
|-可以使用set()方法替换它访问过的最后一个元素:it.next(),it.set(***)。