java - 什么是对 LinkedList 内部元素的(缓慢)访问

标签 java collections arraylist

LinkedList 上的帖子说:

LinkedList 允许固定时间插入或删除,但只能顺序访问元素。换句话说,您可以向前或向后移动列表,但在中间抓取一个元素所花费的时间与列表的大小成正比。

我不明白什么有资格捕获中间的元素?

在下面的代码中,假设arrL是一个包含50个元素的LinkedList,当计数器j达到20时,程序执行arrL.get(20 ).. 这是否意味着程序正在获取中间的元素?同样在下面的程序中,我只是向前走列表,不是吗?

    for(int j=0;j<arrL.size();++j){
        arrL.get(j);
    }

最佳答案

是的,在每次迭代中,您都是从头遍历列表到第 j-th 个元素,因此整体循环性能为 n^2(非常差) .这是因为在每次迭代中,您都有独立的 get() 调用,它具有线性性能。

另一方面,如果您使用迭代器,您将一次遍历列表一个元素,在每次迭代中向前移动一个元素,这要快得多:

for(Iterator<E> iter = arrL.iterator(); iter.hasNext();) {
  E e = iter.next();
}

或更好:

for(E k: arrL) {
}

顺便说一句,这是一个非常的基本数据结构问题,Java 与这里无关...

关于java - 什么是对 LinkedList 内部元素的(缓慢)访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5844093/

相关文章:

java - 我将如何创建 "infinite"循环,直到用户决定退出?

java - 数组输出问题?

java - 自定义 Java 按名称排序

Java 比较数组列表中数组中的元素

java - 如何在文件加载时保持 Java FXML Activity

java - HTML 表不显示 ArrayList 中的值

java - Android 4.4 后 IR 传输 ConsumerIrManager 类不工作

java - Java Lambdas线程安全

scala - 如何在scala的 map 中找到(键,值)对的数量?

java - 这些 java 类是否具有从 JSON 文件映射的正确结构?