关于集合中的实现细节

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

 

转载于:https://www.cnblogs.com/qingtianyu/p/3512298.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值