【ArrayList】
ArrayList类提供了ListADT的一种可增长数组的实现。使用ArrayList的优点在于,对get和set的调用花费常数时间。其缺点是新项的插入和现有项的删除代价昂贵。除非变动是在ArrayList末端进行。
!!:ArrayList中有一个容量的概念,它表示基础数组的大小。在需要的时候,ArrayList将自动增加其容量以保证它至少具有表的大小。如果该大小的早期估计存在,那么ensureCapacity可以设置容量为一个足够大的量以避免数组容量以后的扩展,再有,trimToSize可以在所有的ArrayList添加操作完成之后使用以避免浪费空间。
【LinkedList】
LinkedList类则提供了List ADT的双链表实现。使用的优点在于,新项的插入和现有项的删除均开销很小,这里假设变动项的位置是已知的。这意味着在表的前端进行添加和删除都是常数时间的操作,有次LinkedList更提供了方法addFirst和removeFrist、addLast和removeLast、以及getFirst和getLast等以有效地添加、删除和访问表两段的项。使用的缺点是他不容易索引,因此对get的调用时昂贵的,除非调用非常接近表的端点(如果get的调用时对接近表后补的项进行的,那么搜索的进行可以从表的后部开始)。!!:用迭代器循环比循环get效率更高。
【例如】remove方法对LinkedList类的使用,最高效的方法如下:
对搜索而言,两种都是低效的,对Collection的contains和remove两个方法的调用均花费线性时间。