关于集合中的实现细节

ArrayList跟LinkedList哪个效率高

ArrayList的底层是以数组形式存在的,所以在查询时可以根据索引直接取到值,而在指定位置添加或者删除时就会将指定索引处位置向后的元素全部移动,所以开销很大,效率非常低;而LinkedList的底层是以双向链表形式存在的,当将元素插入到某个位置时( add(int index,Object obj) ),它会一个一个去搜索索引的位置,然后再将元素插入到里边,但相对于ArrayList性能要高得多,而查询的时候也要通过遍历的方式去一步一步找到元素的位置,在返回值。

但有一点需要注意的是,当我们从ArrayList中逐个插入元素时( add(Object obj) )它的效率要比LinkedList效率高,因为ArrayList插入元素的位置后面没有元素不需要移动后面的元素 ,所以内存不会有大的开销。

综合上面来看,一般来说ArrayList的效率要比LinkedList高。下面是测试的代码:

  public class TestList extends TestCase{
    public void testVector() throws Exception {
    List arr=new ArrayList();
    List alist=new LinkedList();
    for (int i = 0; i < 100000; i++) {
      arr2.add(i);
      arr.add(i);
    }
    Long date1=new Date().getTime();
    for (int i = 0; i < 1000; i++) {
     arr.add(i+10,i+100);
     //alist.add(i+10,i+100);

    }
    System.out.println(new Date().getTime()-date1);
    }
  }

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。