一、定义
ArrayList和LinkedList是两个集合类,用于储存一系列的对象引用(references)。
引用的格式分别为:
1 ArrayList<String> list = new
1 LinkedList<Integer> list = new
二、ArrayList与LinkedList的大致区别
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构;
2.对于随机访问get和set,ArrayList优先于LinkedList。因为LinkedList要移动指针。
3.对于新增和删除操作(add和remove),LinkedList比较占优势,因为ArrayList要移动数据。
(关于3,网上又争论,意思是说对大型数据的增删,收尾增删或对中间某位作用,效果是不同的,有待考证!)
三、ArrayList与LinkedList常用方法
代码实例:
1 import java.util.ArrayList;
2
3 public class CollT2 {
4
5 public static void main(String[] args) {
6
7 // 新建一个ArrayList
8 ArrayList<String> list = new ArrayList<String>();
9 System.out.println("初始化大小:" + list.size());
10
11 // 添加元素
12 list.add("北京");
13 list.add("天津");
14 list.add("上海");
15 list.add("广州");
16 list.add("深圳");
17 list.add("海口");
18 list.add("厦门");
19 System.out.println("当前容量:" + list.size());
20
21 // 讲ArrayList的大小和实际所含元素的大小设置一致
22 // 注意:此操作演示下面会抛出的异常:java.util.ConcurrentModificationException
23 list.trimToSize();
24
25 // 遍历
26 for (String string : list) {
27 System.out.println(string);
28
29 // 在指定位置插入元素
30 list.add(2, "黑龙江");
31 for (String string1 : list) {
32 System.out.println(string1);
33 }
34 System.out.println("=======分割线========");
35
36 // 清空list
37 list.clear();
38 for (String string3 : list) {
39 System.out.println(string3);
40 }
41
42 }
43 }
44 }
1 import java.util.LinkedList;
2
3 //ArrayList基于数组实现,所以它具备数组的特点,即查询速度较快,但是修改、插入的速度却有点儿慢。
4 //下面将要介绍的LinkedList就是来解决这个问题的,LinkedList基于链表,与ArrayList互补。
5 //所以实际开发中我们应该按照自己的需求来定到底用哪一个。
6
7 //LinkedList底层采用双向循环列表实现,进行插入和删除操作时具有较高的速度.
8 //我们还可以使用LinkedList来实现队列和栈
9
10 public class CollT3 {
11 @SuppressWarnings("null")
12 public static void main(String[] args) {
13
14 // 創建一個list
15 LinkedList<Integer> list = new LinkedList<Integer>();
16 LinkedList<Integer> list2 = new LinkedList<Integer>();
17 LinkedList<Integer> list3 = new LinkedList<Integer>();
18 LinkedList<Integer> list4 = new LinkedList<Integer>();
19
20 System.out.println(list.size());
21
22 // 添加元素
23 // list.add("锅包肉");没考虑数据类型
24 // list.add("溜肉段");
25 System.out.println("====分割线1====");
26
27 list.add(5);
28 list.add(6);
29 list.add(7);
30 list.add(8);
31 list.add(9);
32 list.add(10);
33
34 list2.add(-1);
35 list2.add(-2);
36 list2.add(-3);
37 list2.add(-4);
38 list2.add(-5);
39
40 list3.add(111);
41 list3.add(222);
42 list3.add(333);
43 list3.add(444);
44 list3.add(555);
45
46 list4=null;
47
48 System.out.println(list.size());
49
50 // 遍历
51 for (Integer a : list) {
52 System.out.println(a);
53 }
54
55 list.add(4, 11111);
56 System.out.println(list);// 竟然是横着打印出来的
57 System.out.println("===分割线2====");
58
59 list.add(3, 22222);
60 System.out.println(list);// 二次验证竟然是横着打印出来的
61
62 System.out.println("===分割线3====");
63 System.out.println(list.addAll(list2));
64 System.out.println(list);
65
66 System.out.println("===分割线4====");
67 // 错误:System.out.println(2,list.addAll(list3));
68 list.addAll(2, list3);// 将指定 collection 中的所有元素从指定位置开始插入此列表。
69 System.out.println(list);
70
71 System.out.println("===分割线5====");
72 list3.addFirst(3);//需要单独打印
73 System.out.println(list3);
74
75 System.out.println("===分割线6====");
76 list3.addLast(0000000001);//1
77 list3.addLast(000000000);//0
78 list3.addLast(0);//0
79 //list3.addLast(00000000000000009);//The literal 00000000000000009 of type int is out of range
80 list3.addLast(0000000000000000000000000000000000007);//末尾只能写到7,8和9不行
81 System.out.println(list3);
82
83 list.clear();
84 System.out.println(list);//[]
85
86 System.out.println("===分割线7====");
87
88 list2.clone();//返回此 LinkedList的浅表副本。
89 System.out.println(list);
90
91 System.out.println("===分割线8====");
92 //list3.contains(999999999);//呃,竟然不是这么验证的!!!!
93 System.out.println(list3.contains(999999999));// 如果此列表包含指定元素,则返回 true。
94
95 System.out.println("===分割线9====");
96 //list3.element();//呃,竟然不是这么验证的!!!!
97 System.out.println(list3.element());//获取但不移除此列表的头(第一个元素)。
98 System.out.println(list3);//验证上面的操作真的只是获取没有移除
99
100 System.out.println("===分割线10====");//注意上面对list3的操作,给它头位添加个3了
101 System.out.println(list3.get(2));// 返回此列表中指定位置处的元素。
102
103 System.out.println("===分割线11====");
104 System.out.println(list3.getFirst());//返回此列表的第一个元素。
105 System.out.println(list3.getLast());//返回此列表的最后一个元素。
106
107 System.out.println("===分割线12====");
108 System.out.println(list3.indexOf(333));//返回此列表中首次出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1。
109 System.out.println(list3.indexOf(10));
110
111 System.out.println("===分割线13====");
112 list3.add(333);
113 list3.add(333);
114 list3.add(333);
115 System.out.println(list3);
116 System.out.println(list3.lastIndexOf(0));//返回此列表中最后出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1。
117 System.out.println(list3.lastIndexOf(9));//-1
118
119 System.out.println("===分割线14====");
120 list3.offer(6);//将指定元素添加到此列表的末尾(最后一个元素)。
121 System.out.println(list3.offer(6));//true
122 System.out.println(list3);
123
124 System.out.println("===分割线15====");
125 System.out.println(list3.peek());// 获取但不移除此列表的头(第一个元素)。
126
127 //peekFirst();获取但不移除此列表的最后一个元素;如果此列表为空,则返回 null。
128 //System.out.println(list4.peekFirst());上面list4定义为null,黄色报错。用了@SuppressWarnings("null")。验证:java.lang.NullPointerException
129 //System.out.println(list4.peekLast());java.lang.NullPointerException
130
131 System.out.println("===分割线16====");
132 System.out.println(list3);
133 list3.poll();
134 System.out.println(list3);
135
136 System.out.println("===分割线17====");
137 System.out.println(list3);
138 list3.toArray();//返回以适当顺序(从第一个元素到最后一个元素)包含此列表中所有元素的数组。
139 System.out.println(list3);
140 }
141
142 }
打印结果:
0
====分割线1====
6
5
6
7
8
9
10
[5, 6, 7, 8, 11111, 9, 10]
===分割线2====
[5, 6, 7, 22222, 8, 11111, 9, 10]
===分割线3====
true
[5, 6, 7, 22222, 8, 11111, 9, 10, -1, -2, -3, -4, -5]
===分割线4====
[5, 6, 111, 222, 333, 444, 555, 7, 22222, 8, 11111, 9, 10, -1, -2, -3, -4, -5]
===分割线5====
[3, 111, 222, 333, 444, 555]
===分割线6====
[3, 111, 222, 333, 444, 555, 1, 0, 0, 7]
[]
===分割线7====
[]
===分割线8====
false
===分割线9====
3
[3, 111, 222, 333, 444, 555, 1, 0, 0, 7]
===分割线10====
222
===分割线11====
3
7
===分割线12====
3
-1
===分割线13====
[3, 111, 222, 333, 444, 555, 1, 0, 0, 7, 333, 333, 333]
8
-1
===分割线14====
true
[3, 111, 222, 333, 444, 555, 1, 0, 0, 7, 333, 333, 333, 6, 6]
===分割线15====
3
===分割线16====
[3, 111, 222, 333, 444, 555, 1, 0, 0, 7, 333, 333, 333, 6, 6]
[111, 222, 333, 444, 555, 1, 0, 0, 7, 333, 333, 333, 6, 6]
===分割线17====
[111, 222, 333, 444, 555, 1, 0, 0, 7, 333, 333, 333, 6, 6]
[111, 222, 333, 444, 555, 1, 0, 0, 7, 333, 333, 333, 6, 6]