歡迎您光臨本站 註冊首頁

區分Java中的ArrayList和LinkedList

←手機掃碼閱讀     zhang3221994 @ 2020-06-29 , reply:0

一:ArrayList和LinkedList的大致區別如下:

1.ArrayList是實現了基於動態數組的數據結構,ArrayList實現了長度可變的數組,在內存中分配連續的空間。遍歷元素和隨機訪問元素的效率比較高

2.LinkedList基於鏈表的數據結構, 插入、刪除元素時效率比較高  故:【插入、刪除操作頻繁時,可使用LinkedList來提高效率】LinkedList提供對頭部和尾部元素進行添加和刪除操作的方法,插入/刪除第一個和最後一個效率比較高;

3:ArrayList和LinkedList都是List接口的實現,都存儲一組不唯一,有序(插入順序)的對象, 對元素進行添加、刪除等操作[ 即:List的性質]

4.對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指針。

5.對於新增和刪除操作add和remove,LinedList比較佔優勢,因為ArrayList要移動數據。

6:LinkedList比ArrayList更佔內存

eg:(代碼示例01)----ArrayList與LinkedLis的數據添加和查找耗時對比

  import java.util.ArrayList;  import java.util.LinkedList;  import java.util.List;    public class HFSD {   static final int N=50000;  //添加5000條數據    static long timeList(List list){  //添加數據所需時間       long start=System.currentTimeMillis();      Object o = new Object();       for(int i=0;i<N;i++) {         list.add(0, o);        }       return System.currentTimeMillis()-start;      }    static long readList(List list){   //查找數據所需時間       long start=System.currentTimeMillis();       for(int i=0,j=list.size();i<j;i++){          }       return System.currentTimeMillis()-start;      }        static List addList(List list){       Object o = new Object();       for(int i=0;i<N;i++) {        list.add(0, o);        }       return list;      }    public static void main(String[] args) {      System.out.println("ArrayList添加"+N+"條耗時:"+timeList(new ArrayList()));       System.out.println("LinkedList添加"+N+"條耗時:"+timeList(new LinkedList()));        List list1=addList(new ArrayList<>());      List list2=addList(new LinkedList<>());      System.out.println("ArrayList查找"+N+"條耗時:"+readList(list1));      System.out.println("LinkedList查找"+N+"條耗時:"+readList(list2));     }

 

從以上結果,我i們可以看出 ArrayList更適合讀取數據,linkedList更多的時候添加或刪除數據。

ArrayList:內部是使用可��長數組實現的,所以是用get和set方法是花費少數時間的,但是如果插入元素和刪除元素,除非插入和刪除的位置都在表末尾,否則代碼開銷會很大,因為裡面需要數組的移動。

LinkedList:是使用雙鏈表實現的,所以get會非常消耗資源,除非位置離頭部很近。但是插入和刪除元素花費少數時間。

二:ArrayList和LinkedList的共有方法(即List的方法):

eg:(代碼示例02)----ArrayList代碼示例

  package JIhekuangjia006.ArrayList;    /**   * 小豬類   */  public class Pig {   private String name;   private String sex;     public Pig(String name,String sex){    this.name=name;    this.sex=sex;   }   public void setName(String name){    this.name=name;   }   public String getName(){    return name;   }   public void setSex(String sex){    this.sex=sex;   }   public String getSex(){    return sex;   }  }

 

  package JIhekuangjia006.ArrayList;    import java.util.*;    /**   * 使用ArrayList集合進行操作數據   */  public class Test1 {   public static void main(String[] args) {    //1.存儲小豬信息    Pig xiaojia=new Pig("小佳","母");//索引為0    Pig xiaolong=new Pig("小龍","公");//索引為1    Pig jiajia=new Pig("佳佳","女");//索引為2    Pig longlong=new Pig("龍龍","男");//索引為3(與數組相同,從0開始)      //為小豬排序    List list=new ArrayList();    //直接將元素添加排序    list.add(xiaojia);    list.add(jiajia);    list.add(xiaolong);      //將龍龍添加到索引為2的位置    list.add(2,longlong);      //list.add(jiajia);//List 接口存儲一組不唯一,有序(插入順序)的對象      //2.獲得小豬的總數    //通過list.size()方法獲取元素的個數    list.size();    System.out.println("小豬的總數為"+list.size());      //3.逐條打印小豬信息    //方法一:for循環與get()方法配合實現遍歷    for(int i=0;i<list.size();i++){     Pig center=(Pig)list.get(i);//因為list.get()的返回值為Object的類型,所以需要強轉為Pig的類型     System.out.println(center.getName()+","+center.getSex());    }      //方法二:通過迭代器Iterator實現遍歷  //  Iterator it=list.iterator();  //  while (it.hasNext()){  //   Pig center=(Pig)it.next();  //   System.out.println(center.getName()+","+center.getSex());  //  }        System.out.println("*********************************************************");    //4.刪除小豬信息    //刪除第一隻小豬,小佳    list.remove(0);//與數組下標相對應    //刪除指定小豬,小龍    list.remove(xiaolong);    //將剩下的小豬信息進行輸出    System.out.println("刪除之後還有"+list.size()+"只小豬, 分別是:");    for(int i=0;i<list.size();i++){     /**      * Object get(int index)返回指定索引位置處的元素。取出的元素是Object類型,      * 使用前需要進行強制類型轉換      */     Pig center=(Pig)list.get(i);//所以需要強轉為Pig的類型       System.out.println(center.getName()+","+center.getSex());    }      System.out.println("*******************************************************");    //5.判斷集合中是否包含指定小豬    if (list.contains(xiaojia)){//使用list.contains()方法進行判斷     System.out.println("集合中有小佳");    }else{     System.out.println("集合中沒有小佳");    }   }  }

測試運行結果如下:

三:LinkedList的特有方法:

eg:(代碼示例03)----LinkedList代碼示例:

  package JIhekuangjia006.LinkedList;    /**   * 小豬類   */  public class Pig {   private String name; //暱稱   private String sex;  //性別     public Pig(String name,String sex){    this.name=name;    this.sex=sex;   }   public void setName(String name){    this.name=name;   }   public String getName(){    return name;   }   public void setSex(String sex){    this.sex=sex;   }   public String getSex(){    return sex;   }  }

 

  package JIhekuangjia006.LinkedList;    import java.util.Iterator;  import java.util.LinkedList;    /**   * 使用LinkedList集合操作數據   */  public class Test2 {   public static void main(String[] args) {    //1.存儲小豬信息    Pig xiaojia=new Pig("小佳","母");//索引為0    Pig xiaolong=new Pig("小龍","公");//索引為1    Pig jiajia=new Pig("佳佳","女");//索引為2    Pig longlong=new Pig("龍龍","男");//索引為3(與數組相同,從0開始)      //為小豬排序    LinkedList list=new LinkedList();    //直接將元素添加排序    list.add(xiaolong);    list.add(longlong);    list.addFirst(jiajia);//將佳佳添加到第一個位置    list.addLast(xiaojia);//將小龍添加到最後一個位置      //list.add(jiajia);//List 接口存儲一組不唯一,有序(插入順序)的對象      //2.獲得小豬的總數    //通過list.size()方法獲取元素的個數    list.size();    System.out.println("小豬的總數為"+list.size());      //3.逐條打印小豬的信息      //方法一:通過迭代器Iterator實現遍歷    Iterator it=list.iterator();    while (it.hasNext()){     Pig center=(Pig)it.next();     System.out.println(center.getName()+","+center.getSex());    }      //方法二:for循環與get()方法配合實現遍歷  //  for(int i=0;i<list.size();i++){  //   Pig pig=(Pig)list.get(i);  //   System.out.println(pig.getName()+","+pig.getSex());  //  }      System.out.println("************************************************");      //4.    //獲取第一隻小豬的信息    Pig center=(Pig)list.getFirst();    System.out.println("第一條狗狗信息是:"+center.getName()+","+center.getSex());    //獲取最後一隻小豬的信息    Pig center1=(Pig)list.getLast();    System.out.println("最後一條狗狗信息是:"+center1.getName()+","+center1.getSex());      System.out.println("*****************************************************");      //5.刪除第一隻小豬和最後一隻小豬    list.removeFirst();    list.removeLast();      System.out.println("*****************************************************");      //6.輸出剩下小豬的信息    System.out.println("剩下還有"+list.size()+"只小豬, 分別是:");    for(int i=0;i<list.size();i++){     Pig pig=(Pig)list.get(i);     System.out.println(pig.getName()+","+pig.getSex());    }    //7.判斷集合中是否存在小佳    if(list.contains(xiaojia)){     System.out.println("集合中存在小佳");    }else{     System.out.println("集合中不存在小佳");    }   }  }

測試運行結果如下:

 

   


[zhang3221994 ] 區分Java中的ArrayList和LinkedList已經有295次圍觀

http://coctec.com/docs/java/show-post-240277.html