激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術(shù)及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 區(qū)分Java中的ArrayList和LinkedList

區(qū)分Java中的ArrayList和LinkedList

2020-06-29 11:37你的龍兒 JAVA教程

這篇文章主要介紹了如何區(qū)分Java中ArrayList和LinkedList,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下

一:ArrayListLinkedList的大致區(qū)別如下:

1.ArrayList是實現(xiàn)了基于動態(tài)數(shù)組的數(shù)據(jù)結(jié)構(gòu),ArrayList實現(xiàn)了長度可變的數(shù)組,在內(nèi)存中分配連續(xù)的空間。遍歷元素和隨機訪問元素的效率比較高

2.LinkedList基于鏈表的數(shù)據(jù)結(jié)構(gòu), 插入、刪除元素時效率比較高  故:【插入、刪除操作頻繁時,可使用LinkedList來提高效率】

                     LinkedList提供對頭部和尾部元素進行添加和刪除操作的方法,插入/刪除第一個和最后一個效率比較高;

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

4.對于隨機訪問get和set,ArrayList覺得優(yōu)于LinkedList,因為LinkedList要移動指針。

5.對于新增和刪除操作add和remove,LinedList比較占優(yōu)勢,因為ArrayList要移動數(shù)據(jù)。

6:LinkedList比ArrayList更占內(nèi)存

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
 
public class HFSD {
  static final int N=50000;   //添加5000條數(shù)據(jù)
   static long timeList(List list){    //添加數(shù)據(jù)所需時間
         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){      //查找數(shù)據(jù)所需時間
         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));
     }

區(qū)分Java中的ArrayList和LinkedList

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

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

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

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

區(qū)分Java中的ArrayList和LinkedList

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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;
  }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package JIhekuangjia006.ArrayList;
 
import java.util.*;
 
/**
 * 使用ArrayList集合進行操作數(shù)據(jù)
 */
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(與數(shù)組相同,從0開始)
 
    //為小豬排序
    List list=new ArrayList();
    //直接將元素添加排序
    list.add(xiaojia);
    list.add(jiajia);
    list.add(xiaolong);
 
    //將龍龍?zhí)砑拥剿饕秊?的位置
    list.add(2,longlong);
 
    //list.add(jiajia);//List 接口存儲一組不唯一,有序(插入順序)的對象
 
    //2.獲得小豬的總數(shù)
    //通過list.size()方法獲取元素的個數(shù)
    list.size();
    System.out.println("小豬的總數(shù)為"+list.size());
 
    //3.逐條打印小豬信息
    //方法一:for循環(huán)與get()方法配合實現(xiàn)遍歷
    for(int i=0;i<list.size();i++){
      Pig center=(Pig)list.get(i);//因為list.get()的返回值為Object的類型,所以需要強轉(zhuǎn)為Pig的類型
      System.out.println(center.getName()+","+center.getSex());
    }
 
    //方法二:通過迭代器Iterator實現(xiàn)遍歷
//    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);//與數(shù)組下標相對應
    //刪除指定小豬,小龍
    list.remove(xiaolong);
    //將剩下的小豬信息進行輸出
    System.out.println("刪除之后還有"+list.size()+"只小豬,\n分別是:");
    for(int i=0;i<list.size();i++){
      /**
       * Object get(int index)返回指定索引位置處的元素。取出的元素是Object類型,
       * 使用前需要進行強制類型轉(zhuǎn)換
       */
      Pig center=(Pig)list.get(i);//所以需要強轉(zhuǎn)為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("集合中沒有小佳");
    }
  }
}

測試運行結(jié)果如下:

區(qū)分Java中的ArrayList和LinkedList

三:LinkedList的特有方法:

區(qū)分Java中的ArrayList和LinkedList

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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;
  }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package JIhekuangjia006.LinkedList;
 
import java.util.Iterator;
import java.util.LinkedList;
 
/**
 * 使用LinkedList集合操作數(shù)據(jù)
 */
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(與數(shù)組相同,從0開始)
 
    //為小豬排序
    LinkedList list=new LinkedList();
    //直接將元素添加排序
    list.add(xiaolong);
    list.add(longlong);
    list.addFirst(jiajia);//將佳佳添加到第一個位置
    list.addLast(xiaojia);//將小龍?zhí)砑拥阶詈笠粋€位置
 
    //list.add(jiajia);//List 接口存儲一組不唯一,有序(插入順序)的對象
 
    //2.獲得小豬的總數(shù)
    //通過list.size()方法獲取元素的個數(shù)
    list.size();
    System.out.println("小豬的總數(shù)為"+list.size());
 
    //3.逐條打印小豬的信息
 
    //方法一:通過迭代器Iterator實現(xiàn)遍歷
    Iterator it=list.iterator();
    while (it.hasNext()){
      Pig center=(Pig)it.next();
      System.out.println(center.getName()+","+center.getSex());
    }
 
    //方法二:for循環(huán)與get()方法配合實現(xiàn)遍歷
//    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()+"只小豬,\n分別是:");
    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("集合中不存在小佳");
    }
  }
}

測試運行結(jié)果如下:

區(qū)分Java中的ArrayList和LinkedList

以上就是區(qū)分Java中的ArrayList和LinkedList的詳細內(nèi)容,更多關(guān)于Java中ArrayList和LinkedList的資料請關(guān)注服務器之家其它相關(guān)文章!

原文鏈接:https://www.cnblogs.com/liangbaolong/p/12884574.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美亚成人 | 日本一区二区在线 | 欧美精品久久久久久久久老牛影院 | 88xx成人永久免费观看 | 91精品国产一区二区三区动漫 | av大全在线免费观看 | 一级看片免费视频 | 国产精品一区二区视频 | 国产久草视频在线 | 日本在线高清 | 国产精品地址 | 成人国产在线看 | 中文欧美日韩 | 日本在线看片 | 神马久久精品综合 | 成人mm视频在线观看 | 国产免费人做人爱午夜视频 | 一级毛片在线免费播放 | 青青草成人av | 久久99在线 | 久久草在线观看视频 | 黄色片免费看网站 | 成码无人av片在线观看网站 | 成人三级黄色片 | 国产毛片在线 | 欧美18xxxx | 亚洲视频在线免费看 | 免费看毛片网站 | 黄色免费高清网站 | 激情五月少妇a | 一区二区三区日韩 | 天天都色 | 欧美视频不卡 | 亚洲综合视频在线播放 | 欧美黑人xx | 国产精品成人av片免费看最爱 | 成人做爰高潮片免费视频韩国 | 欧美日韩在线视频观看 | 亚洲最新无码中文字幕久久 | 日韩在线播放中文字幕 | 亚洲人成在线播放 |