-LinkedList
和ArrayList
有什么区别?什么时候使用LinkedList
更好?
我想每个Java开发人员至少在面试中听过一次这个问题。
-如果您希望能够在列表中间插入项目,则首选链表。
从这里
忘了提到插入费用。在LinkedList中,一旦有了正确的位置,插入将花费O(1)
,而在ArrayList中,插入将上升到O(n)
-所有超过插入点的元素都必须移动。
从这里
还有更多...
但你有没有尝试过自己复制它?我昨天试了一下,得到了这些结果:
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class Test {
public static void main(String... args) {
final int MAX_VAL = 10000;
List<Integer> linkedList = new LinkedList<Integer>();
List<Integer> arrayList = new ArrayList<Integer>();
for(int i = 0; i < MAX_VAL; i++) {
linkedList.add(i);
arrayList.add(i);
}
long time = System.nanoTime();
for(int i = 0; i < MAX_VAL; i++) {
linkedList.add(MAX_VAL/2, i);
}
System.out.println("LL time: " + (System.nanoTime() - time));
time = System.nanoTime();
for(int i = 0; i < MAX_VAL; i++) {
arrayList.add(MAX_VAL/2, i);
}
System.out.println("AL time: " + (System.nanoTime() - time));
}
}
产出:
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class Test {
public static void main(String... args) {
final int MAX_VAL = 10000;
List<Integer> linkedList = new LinkedList<Integer>();
List<Integer> arrayList = new ArrayList<Integer>();
for(int i = 0; i < MAX_VAL; i++) {
linkedList.add(i);
arrayList.add(i);
}
long time = System.nanoTime();
for(int i = 0; i < MAX_VAL/2; i++) {
linkedList.remove(MAX_VAL/2);
}
System.out.println("LL time: " + (System.nanoTime() - time));
time = System.nanoTime();
for(int i = 0; i < MAX_VAL/2; i++) {
arrayList.remove(MAX_VAL/2);
}
System.out.println("AL time: " + (System.nanoTime() - time));
}
}
哦,ArrayList还是比LinkedList快。原因何在?这个神话破灭了吗?也许我错了?
破灭
不是真的。这里
for(int i = 0; i < MAX_VAL; i++) {
linkedList.add(MAX_VAL/2, i);
}
你不只是插入项目;您每次都要付出从开始到i
迭代的代价。当然,这是o(i)
。
下面是我的测试代码: 产出:
本文向大家介绍java中ArrayList与LinkedList对比详情,包括了java中ArrayList与LinkedList对比详情的使用技巧和注意事项,需要的朋友参考一下 ArrayList,LinkedList都是Collection接口的通用实现方式,两者采用了不用的存储策略,用来适应不同场合的需要。 实现方式 ArrayList的内部采用集合的方式存储数据 唯一需要注意的是对于
问题内容: 我是Java新手。我想将ResultSet数据插入JavaFX TableView,但我不会使用中间类。我可以将ResultSet行插入到TableView行中作为对象吗? 这是我使用中间类单元的代码 控制者 问题答案: 您需要一些东西来保存数据。某些东西(您称为“中间类”)将成为您的的数据类型。 它不必一定是您创建的类,但是如果您仅使用一般性的东西,那么您的代码将很难理解。例如,您可
我了解到是作为双链表实现的,它在添加和删除上的性能比好,但在get和set方法上的性能更差。 这是否意味着我应该选择而不是来插入? 我写了一个小测试,发现插入速度更快,那么链表怎么比快呢? 请参考下面我所做的例子。
代码所做的是创建数组和链表,并为每个元素提供一个开始。然后,将对这两个数组运行,并在数组中的某个随机索引处插入一个随机值。它将添加到每个数组的值的数量由用户的输入决定。 因此,从根本上说,人们会认为函数返回这两种列表类型所需的时间相同(可能会稍微快一些)。但是,实际的结果似乎表明,比链表快得多,而不管您添加的元素数量如何(您可以在这里尝试一下)。 无论如何,我的猜测是,这可能与缓存有关,而且将为插
问题内容: 我了解这是作为双重链接列表实现的。它在add和remove上的性能优于,但在get和set方法上却较差。 这是否意味着我应该选择在插入? 我写了一个小测试,发现插入速度更快。那如何链表比? 请参考下面的示例。 问题答案: Linkedlist确实在插入时速度更快,问题出在您的示例中。在您的代码中,您一直都需要附加到末尾。对于ArrayList,它与LinkedList一样容易。您应该做