List的每个子节点的add方法和get方法的速度有多快

时间:2016-06-19 21:56:48

标签: java performance arraylist linked-list

我正在处理我的java应用程序,我担心性能速度,特别是因为我有很多数据结构,如List,Map等。

我知道LinkedList的add(Object obj)方法的复杂性是O(1)(使用LinkedList的主要原因)和ArrayList的get(int index)方法的复杂性是O(1)(主要原因)使用ArrayList)。

我在互联网上找到了以下文章:

  

尝试在优化代码的ArrayList性能时遵循这些规则:

     

将元素添加到列表的末尾
  从最后删除元素
  避免使用contains,indexOf和remove(Object)方法   更加避免removeAll和retainAll方法
  使用subList(int,int).clear()idiom快速清理列表的一部分

现在我需要知道的是,在列表末尾添加元素是什么意思,因为我担心如果我们不使用index作为add方法的参数,换句话说,如果我们使用add( Object obj)方法然后元素总是添加到最后。

我有以下两种方法,我想知道当我们有1000个文件时这些方法的性能是否可取。如果没有,那么如何提高性能

我使用了像jvm这样的探测器来测量速度性能,但我仍然不确定这是否是我能达到的最佳性能

@extends('layouts.app')

@section('content')

<div class="container">
    <h1 class="text-center">Add Bookmark</h1>

    <form method="post" action="{{ url('/bookmarks') }}">
        {{ csrf_field() }}
        <div class="form-group">
            <label for="name">Name:</label>
            <input type="text" class="form-control" id="name" placeholder="Name">
        </div>
        <div class="form-group">
            <label for="season">Season:</label>
            <input type="text" class="form-control" id="season" placeholder="Season">
        </div>
        <div class="form-group">
            <label for="episode">Episode:</label>
            <input type="text" class="form-control" id="episode" placeholder="Episode">
        </div>
        <button type="submit" class="btn btn-primary">Add Booenter code herekmark</button>
    </form>
</div>

@endsection

1 个答案:

答案 0 :(得分:2)

对于绝大多数用例,

ArrayList优于LinkedList。请查看this Q&A,了解有关其效果差异的讨论。

简而言之,ArrayListadd(Object o)的O(1)的摊销复杂度。它们还具有更好的缓存局部性的好处,因为所有项目都分配在一块内存中,而不是分散在整个堆中,这需要额外的间接,这是非常昂贵的。

说,你担心性能会很好,但是如果你需要处理的是一个包含1000个项目的列表,你可能会看到两个实现之间的差别。您的列表并不是那么大,您还要将列表中的操作与I / O操作混合在一起,这肯定会占据应用程序的执行时间。