我正在处理我的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
答案 0 :(得分:2)
ArrayList
优于LinkedList
。请查看this Q&A,了解有关其效果差异的讨论。
简而言之,ArrayList
对add(Object o)
的O(1)的摊销复杂度。它们还具有更好的缓存局部性的好处,因为所有项目都分配在一块内存中,而不是分散在整个堆中,这需要额外的间接,这是非常昂贵的。
说,你担心性能会很好,但是如果你需要处理的是一个包含1000个项目的列表,你可能会看到两个实现之间的差别。您的列表并不是那么大,您还要将列表中的操作与I / O操作混合在一起,这肯定会占据应用程序的执行时间。