ArrayList、LinkedList、Vector
ArrayList不是同步的,基于数组实现的数据结构,对于查询的效率高,对于add和remove的效率低。(数组是定长的,add或者remove操作会改变数组的长度,为了改变数组的长度只能创建一个新的数组,并将数据复制到新数组中)。
LinkedList不是同步的,基于链表实现的,对于add和remove的效率相对较高,对于随机访问的效率较低。
Vector是线程同步的,适用多线程的情况下。但是针对同步的情况,我们大都会使用SychronizedList,而不使用Vector。因为Vector的扩容问题,默认扩容为原来的2倍,如果不指定初始容量,那么容量大小永远是零;而如果指定的容量大小,扩容的时候会扩大到原来的2倍,容易造成空间资源浪费。
什么情况下使用ArrayList,什么情况下使用LinkedList?
ArrayList在使用查询较多,使用增加和删除较少的情况下使用;这里的主要原因是,在ArrayList中访问元素的最糟糕的时间复杂度是”1″,而在LinkedList中可能就是”n”了。在ArrayList中增加或者删除某个元素,通常会调用System.arraycopy方法,这是一种极为消耗资源的操作,因此,在频繁的插入或者是删除元素的情况下,LinkedList的性能会更加好一点。(查看一下ArrayList的add和remove方法便知)。
网友评论