`

arraylist和linkedlist

    博客分类:
  • java
阅读更多
arraylist用iterator顺序循环的时候还可以
用get来循环 杯具了

引用

一般大家都知道ArrayList和LinkedList的大致区别:


1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据


不多说,先上测试代码




package org.dean.collect;

import java.util.*;

class Person {   
    private String name;   
  
    public Person(String n) {   
        this.name = n;   
    }   
  
    public String getName() {   
        return this.name;   
    }   
}   
  
public class ListTest {   
    public static void main(String[] args) {   
        LinkedList<Person> l = new LinkedList<Person>();   
        Iterator<Person> itl;   
           
        System.out.println("=========ArrayList AddLast=====================");   
        long start = System.currentTimeMillis();   
        ArrayList<Person> a = new ArrayList<Person>();   
        Iterator<Person> ita;   
        for (int n = 0; n < 50000; n++) {   
            a.add(new Person(Integer.toString(n)));   
        }   
        long end = System.currentTimeMillis();   
        System.out.println(end - start + "ms");   
        System.out.println("=========LinkedList AddLast=====================");   
        start = System.currentTimeMillis();   
        for (int n = 0; n < 50000; n++) {   
            l.add(new Person(Integer.toString(n)));   
        }   
        end = System.currentTimeMillis();   
        System.out.println(end - start + "ms");   
           
        System.out.println("=========ArrayList AddFirst=====================");   
        start = System.currentTimeMillis();   
        ArrayList<Person> a2 = new ArrayList<Person>();   
           
        for (int n = 0; n < 50000; n++) {   
            a2.add(0,new Person(Integer.toString(n)));   
        }   
        end = System.currentTimeMillis();   
        System.out.println(end - start + "ms");   
        System.out.println("=========LinkedList AddFirst=====================");   
        start = System.currentTimeMillis();   
        LinkedList<Person> l2 = new LinkedList<Person>();   
        for (int n = 0; n < 50000; n++) {   
            l2.addFirst(new Person(Integer.toString(n)));   
        }   
        end = System.currentTimeMillis();   
        System.out.println(end - start + "ms");   
           
           
           
        itl = l.iterator();   
        ita=a.iterator();   
           
        System.out.println("=========ArrayList Get=====================");   
         start = System.currentTimeMillis();   
        for(int i=0;i<a.size();i++){   
            a.get(i);   
        }   
         end = System.currentTimeMillis();   
        System.out.println(end - start + "ms");   
        System.out.println("=========LinkedList Get======================");   
        start = System.currentTimeMillis();   
        for(int i=0;i<l.size();i++){   
            l.get(i);   
        }   
        end = System.currentTimeMillis();   
        System.out.println(end - start + "ms");   
           
        System.out.println("=========ArrayList Remove=====================");   
        start = System.currentTimeMillis();   
        while (ita.hasNext()) {   
            ita.next();   
            ita.remove();   
        }   
        end = System.currentTimeMillis();   
        System.out.println(end - start + "ms");   
        System.out.println("=========LinkedList Remove======================");   
        start = System.currentTimeMillis();   
        while (itl.hasNext()) {   
            itl.next();   
            itl.remove();   
        }   
        end = System.currentTimeMillis();   
        System.out.println(end - start + "ms");   
    }   
}


引用

测试结果

=========ArrayList AddLast=================
203ms
=========LinkedList AddLast================
125ms
=========ArrayList AddFirst=================
2625ms
=========LinkedList AddFirst================
62ms
=========ArrayList Get====================
15ms
=========LinkedList Get===================
37891ms
=========ArrayList Remove=================
2562ms
=========LinkedList Remove================
16ms

小结:

ArrayList和LinkedList在性能上各有优缺点,都有各自所适用的地方,总的说来可以描述如下:


1.对ArrayList和LinkedList而言,在列表末尾增加一个元素所花的开销都是固定的。对ArrayList而言,主要是在内部数组中增加一项,指向所添加的元素,偶尔可能会导致对数组重新进行分配;而对LinkedList而言,这个开销是统一的,分配一个内部Entry对象。
2.在ArrayList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在LinkedList的中间插入或删除一个元素的开销是固定的。
3.LinkedList不支持高效的随机元素访问。
4.ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间
可以这样说:当操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能;当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Dantin/archive/2009/05/05/4152254.aspx
分享到:
评论

相关推荐

    ArrayList和Linkedlist1

    在IT领域,特别是Java编程中,ArrayList和LinkedList是两种非常重要的数据结构,它们都是List接口的实现类。理解这两者的区别对于优化程序性能至关重要。面试官询问这些知识点,旨在评估应聘者的理论基础和实践能力...

    Java中ArrayList和LinkedList区别 时间复杂度 与空间复杂度1

    在 Java 中,ArrayList 和 LinkedList 是两种常用的集合类,它们各自具有不同的特性和适用场景,主要体现在数据结构、访问效率和操作性能上。 1. 数据结构: - ArrayList 实现了一个动态数组,它内部是一个 Object...

    测试ArrayList和LinkedList的add方法

    测试ArrayList和LinkedList的add方法

    【Java面试题】ArrayList和LinkedList区别

    【Java面试题】ArrayList和LinkedList区别

    关于arraylist和linkedList的区别

    ### 关于ArrayList与LinkedList的区别 在Java编程语言中,`ArrayList`与`...综上所述,在选择使用`ArrayList`还是`LinkedList`时,需要根据具体的使用场景和需求来决定,以便在内存占用、操作速度等方面达到最佳平衡。

    Java中ArrayList和LinkedList区别

    - 对于顺序遍历,LinkedList和ArrayList的性能相近,因为都需要逐个访问元素。 - 如果需要频繁插入、删除并同时遍历,LinkedList可能更适合,因为它在这些操作上的开销小。 6. 适用场景: - 当需要频繁的随机...

    当面试官问我ArrayList和LinkedList哪个更占空间时,我这么答让他眼前一亮

    ArrayList和LinkedList的比较与实现原理 在 Java 中,ArrayList 和 LinkedList 是两个常用的集合类,它们都是 List 接口的实现类,但它们之间有着鲜明的区别。今天,我们将深入探讨这两个集合类的实现原理和比较。 ...

    10.ArrayList 和LinkedList的区别.avi

    10.ArrayList 和LinkedList的区别.avi

    ArrayList LinkedList Vector区别

    ArrayList 和 LinkedList 都可以用于实现堆栈、队列或双向队列等数据结构。 Collection 接口是 Java 中最基本的集合接口,一个 Collection 代表一组 Object,即 Collection 的元素(Elements)。Collection 接口...

    对ArrayList和LinkedList底层实现原理详解

    ArrayList和LinkedList底层实现原理详解 ArrayList 底层实现方式的知识点: 1. ArrayList 底层实现方式:ArrayList 通过数组实现,一旦我们实例化 ArrayList 无参数构造函数默认为数组初始化长度为 10。 2. add ...

    TWDH#Leetcode-From-Zero#10.ArrayList和LinkedList1

    10.ArrayList和LinkedList基于动态数组,连续内存存储,适合下标访问(随机访问)扩容机制:因为数组长度固定,超出长度存数据时需要新建数组,然后

    ArrayList LinkedList Vector性能对比

    ArrayList、LinkedList和Vector是三种常见的动态数组实现,它们各自有特定的特性和使用场景。这里我们将深入探讨这三个类的性能对比,以及它们在不同操作下的表现。 ArrayList是基于动态数组实现的,它提供了随机...

    java 集合之实现类ArrayList和LinkedList的方法

    "java 集合之实现类ArrayList和LinkedList的方法" Java 集合框架中,ArrayList 和 LinkedList 是两种常用的实现类,分别实现了 List 接口。下面我们将详细介绍这两种实现类的方法。 ArrayList ArrayList 是一个...

    arraylist-linkedlist-test.zip

    ArrayList和LinkedList是Java集合框架中两种重要的动态数组实现,它们都是List接口的实现类,但它们在存储和操作数据方面有着显著的区别。本文件"arraylist-linkedlist-test.zip"主要探讨了在执行添加和删除元素操作...

    ArrayList-LinkedList-源码.rar

    在Java编程中,ArrayList和LinkedList是两种常见的动态数组,它们都是Java集合框架的一部分,提供了对元素存储和操作的功能。本篇将深入探讨ArrayList和LinkedList的内部实现机制,通过源码分析来揭示它们在性能、...

    合理运用ArrayList与LinkedList

    在Java的集合框架中,ArrayList和LinkedList是两种常用的列表实现,它们都实现了List接口,但它们在内存管理和操作效率上存在显著差异。了解这些差异并根据具体应用场景选择合适的列表类型,能够有效提升J2EE应用...

    ArrayList 和LinkedList各自的特点是什么

    通过对比`ArrayList`和`LinkedList`,我们可以看到两种集合类各有优势: - **`ArrayList`**:适用于需要频繁进行随机访问且对插入删除操作次数较少的场景。例如,在处理大量数据并经常需要根据索引进行查询的情况下...

    ArrayList LinkedList Vector性能测试

    在Java编程语言中,ArrayList、LinkedList和Vector是三种常见的动态数组实现,它们都在java.util包中,用于存储和管理对象的集合。这三个类都实现了List接口,提供了多种操作方法,但它们在内部实现和性能特性上有所...

    arraylist和linkedlist的时间复杂度

    arraylist 和linked list的时间复杂度

Global site tag (gtag.js) - Google Analytics