The difference (advantages & disavanteges ) between Arraylist and Linkedlist

先放总结: ArrayList 在时间复杂度上表现出 查询快  更改操作消耗大的特点,而LinkedList则表现出 查询相对耗费大,而更改快的特点 所以两种list可以择优使用!

首先 放上自己打的一段 模仿 残缺的 LinkedList 代码:

  1 public class linkListDemo {
  2     /**
  3      * first refer to the first ele
  4      * last refer to the last ele , Object
  5      * */
  6     private Node first = null;
  7     private Node last  = null;
  8
  9
 10     /**
 11      * the size of the list
 12      * */
 13     private int size = 0;
 14
 15
 16
 17     /**
 18      * add a new node to the last position
 19      * */
 20     public void addLast(Object ele){
 21
 22         //create a new node which pose on the next position of the previous one
 23         Node node = new Node(ele);
 24
 25         //size would not be lower than zero ,so we don‘t need out-of-bound check
 26         if(size == 0){
 27             /**
 28              * no doubt that the first and last ele of the very first element is itself
 29              * */
 30
 31             /**
 32              * set the first and last node of the linkedlist
 33              * */
 34             this.last  = node; //belongs to a linkedlist
 35             this.first = node; //belongs to a linkedlist
 36         }
 37         else{
 38             this.last.next = node;
 39             node.prev = this.last;
 40             this.last = node;
 41
 42
 43         }
 44         size++;
 45     }
 46
 47     /**
 48      * remove operation a node in the linkedlist
 49      * */
 50     public void remove(Node nd){
 51
 52     }
 53     /**
 54      * add a new node to the first position
 55      * */
 56     public void addFirst(){
 57
 58     }
 59
 60     /**
 61      * class node , which contain its previous node and next node , as well as its own element
 62      * */
 63      class Node {
 64          /**
 65           * ele , pre ,next
 66           * */
 67          Node(Object ele){
 68              this.ele = ele;
 69          }
 70         //element
 71         private Object ele;
 72
 73         //previous
 74         Node prev;
 75
 76         //next
 77         Node next;
 78
 79
 80
 81     /**
 82      * overwrite toString method
 83      * */
 84     }
 85     public String toString(){
 86
 87         //the first node
 88         Node currentNode = this.first;
 89         if(size == 0){
 90             String str = "[]";
 91             return null;
 92         }
 93         else{
 94             StringBuffer sb = new StringBuffer();
 95             sb.append("[");
 96             for(int i = 0 ; i < size; i++){
 97
 98                 //add element
 99                 sb.append(currentNode.ele);
100                 currentNode = currentNode.next;
101
102                 //add ","
103                 if(i != (size - 1)){
104                     sb.append(",");
105                 }
106             }
107             sb.append("]");
108
109             //@return
110             return sb.toString();
111         }
112
113     }
114 }

还有  ArrayLIst 的:

 1 /**
 2  * @command 学习仿作一个Arrayist
 3  * */
 4 public class MyArrayList {
 5     /**主体数组*/
 6     Object[] elementData;
 7     /**初始化后的数组元素个数*/
 8     private int size = 0;
 9     /**默认长度*/
10     private static final Integer DEFAULT_CAPACITY = 10;
11     /**empty list that has initialized*/
12     private static final Object[] EMPTY_ELEMENTDATA = null;
13     /** Constructor
14      * @throws Exception */
15     public MyArrayList() throws Exception{
16         this(DEFAULT_CAPACITY);
17     }
18     /**
19      * Constructs an empty list with the specific initial capacity
20      * @param initialCapacity the initial capacity of the list
21      * @exception IllegalArgumentException if the specific capacity
22      * is negative
23      *
24      * */
25      public MyArrayList(Integer initialCapacity)throws IllegalArgumentException {
26         if(initialCapacity > 0){
27         this.elementData = new Object[initialCapacity];
28         }else if (initialCapacity ==0){
29             this.elementData = EMPTY_ELEMENTDATA;
30         }else {
31             //真的是 实践学习得最多 :throw exception 时要用new  因为你这个是一个新的异常 如果不用new 默认当是方法
32             throw new IllegalArgumentException("Illegal capacity : " + initialCapacity);
33         }
34     }
35     public static void add(Object obj){
36
37     }
38
39     /**
40      * return true if the arraylist is empty
41      * else  return false
42      * */
43     public boolean isEmpty(){
44         return size == 0;
45     }
46
47     /**
48      * return the element of the specific index
49      * */
50     public Object get(Integer index){
51         rangeCheck(index);//checked
52         return elementData[index];
53     }
54
55     /**
56      * to check whether if the index is out-of-bound
57      * */
58     private void rangeCheck(Integer index) {
59         // TODO Auto-generated method stub
60         if(index > size){
61             throw new IndexOutOfBoundsException("index");// actually Java api used outofboundmsg(which is a defined string
62         }
63     }
64 }
时间: 2024-10-12 22:58:38

The difference (advantages & disavanteges ) between Arraylist and Linkedlist的相关文章

Java中ArrayList和LinkedList区别

一般大家都知道ArrayList和LinkedList的大致区别:      1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构.      2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针.      3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据. ArrayList和LinkedList是两个集合类,用于存储一系列的对象引用

java的List接口的实现类 ArrayList,LinkedList,Vector 的区别

Java的List接口有3个实现类,分别是ArrayList.LinkedList.Vector,他们用于存放多个元素,维护元素的次序,而且允许元素重复. 3个具体实现类的区别如下: 1. ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问.数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要将已经有数组的数据复制到新的存储空间中.当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制.移动.代价比较高.因此,它

ArrayList和LinkedList的区别

从字面上大概可以猜出ArrayList是用数组实现的的一种数据结构:LinkedList采用链表实现.那么要剖析区别的话大概可以概括到数组和链表的区别.结合在数据结构课上所学,我大概可以猜出几点区别,无外乎数组采用连续的内存空间存储数据,链表中用到了引用,那么存储的内容可以不在连续的内存空间里.以上是假如不会ArrayList和LinkedList的前提下做的假设.实际上两者主要区别有三点. 1.ArrayList是使用动态数组实现的数据结构,LinkedList使用双链表实现   2.Arra

List、ArrayList、LinkedList的区别及使用

首先我们要知道List是java中的接口,而不是实现类,所以它是不能实例化的,例如以下代码: 1 public static void main(String[] args) { 2 List list=new List(); 3 4 } java中会报错,而ArrayList和LinkedList是实现了这个接口的实现类,可以进行实例化,其定义如下: 1 public static void main(String[] args) { 2 3 ArrayList list1=new Array

Java中arraylist和linkedlist源代码分析与性能比較

Java中arraylist和linkedlist源代码分析与性能比較 1,简单介绍 在java开发中比較经常使用的数据结构是arraylist和linkedlist,本文主要从源代码角度分析arraylist和linkedlist的性能. 2,arraylist源代码分析 Arraylist底层的数据结构是一个对象数组.有一个size的成员变量标记数组中元素的个数,例如以下图: * The array buffer into which the elements of the ArrayLis

JAVA集合类之ArrayList和LinkedList性能比较

关于ArrayList和LinkedList这两个集合类的性能,网上很多文章表示:ArrayList的插入性能要比LinkedList差.今天突然想测试下,这个结论是否准确. 编写了如下代码: import java.util.ArrayList; import java.util.LinkedList; import java.util.List; public class Demo { public static void main(String[] args) { int count = 

ArrayList和LinkedList

ArrayList,LinkedList 首先提一下LinkedList,ArrayList的定义概念: ArrayList:ArrayList其实是包装了一个数组 Object[],当实例化一个ArrayList时,一个数组也被实例化,当向ArrayList中添加对象是,数组的大小也相应的改变. 优点: 快速随即访问 你可以随即访问每个元素而不用考虑性能问题,通过调用get(i)方法来访问下标为i的数组元素. 缺点:      向其中添加对象速度慢 当你创建数组是并不能确定其容量,所以当改变这

ArrayList vs. LinkedList vs. Vector

翻译自:ArrayList vs. LinkedList vs. Vector 1.列表概览 就像它的名字一样,List是一个元素的有序序列.当我们讨论列表时把它与Set(两两不等且无序的元素集合)进行比较是一个好主意.下面是容器的类层次图.从这个层次图中可以了解Java容器的一般概念. 2.ArrayList vs. LinkedList vs. Vector 从上图可知,它们都实现了List接口,而且用法很相似.它们主要的不同在于它们的实现导致的对不同的操作有不同的性能. ArrayList

ArrayList,Vector,LinkedList的存储性能和特征

ArrayListh和Vector都是采用数组的方式来存储数据,其中ArrayList是线程不安全的,Vector是线程安全,所以ArrayList的性能要比Vector的性能好一些,而LinkedList采用的双向链表来实现数据的存储,而且是线程不安全的,而且LinkedList提供了一些方法,使得LinkedList可以被当做栈和队列来使用.因为ArrayList和Vector采用的数组的方式来实现存储数据,所以查询数据比较快捷,但是进行数据增删操作比较慢些,但是LinkedList采用的事