一: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的數據添加和查找耗時對比
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條數據 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代碼示例
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集合進行操作數據 */ 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()+ "只小豬,\n分別是:" ); 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代碼示例:
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集合操作數據 */ 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()+ "只小豬,\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( "集合中不存在小佳" ); } } } |
測試運行結果如下:
以上就是區分Java中的ArrayList和LinkedList的詳細內容,更多關于Java中ArrayList和LinkedList的資料請關注服務器之家其它相關文章!
原文鏈接:https://www.cnblogs.com/liangbaolong/p/12884574.html