关于集合中的实现细节

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);
    }
  }

关于集合中的实现细节

上一篇:保时捷911贵吗?no,是保时捷拖拉机


下一篇:诺基亚增强AirFrame 数据中心产品组合,服务于超大规模数据中心部署