List中的元素是有序的,且允许重复。重点掌握ArrayList和LinkedList
1.1 List接口相比Colleciton接口的新增方法
List接口比Collection接口中新增的几个实用方法:
- public Object get(int index) 根据下标,返回列表中的元素
- public Object add(int index, Object element); 在列表的指定位置插入指定元素.将当前处于该位置的元素(如果有的话)和所有后续元素向右移动
- public Object set(int index, Object element) ; 用指定元素替换列表中指定位置的元素
- public Object remove(int index) 移除列表中指定位置的元素
注意:list集合中的元素的索引与数组中元素的索引一样,均是从0开始。
1.2 ArrayList集合
底层通过数组扩容(Arrays.copuOf())实现动态可变集合,存储的必须是对象,不能存储基础数据类型。(储存地址连续)
复制代码
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
57package com.qianfeng.cl; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * * @Title DemoArrayList.java * @Package com.qianfeng.cl * @Description * @author CL * @date 2020年3月5日 * @version 1.0 */ public class DemoArrayList { public static void main(String[] args) { test(); } public static void test() { List<String> arrayList = new ArrayList<String>(); //增 for(int i = 1;i < 10; i++) { arrayList.add("jack"+i); } System.out.println("--------------------------"); //删 arrayList.remove(2); //改 arrayList.set(3, "trom"); //查 //普通for循环 for(int i = 0 ;i < arrayList.size();i++) { System.out.println(arrayList.get(i)); } System.out.println("--------------------------"); //增强for循环,尽量只进行打印操作,不进行其他操作 for(String str:arrayList) { System.out.println(str); } System.out.println("--------------------------"); //迭代器 for(Iterator<String> iterator = arrayList.iterator(); iterator.hasNext();System.out.println(iterator.next())) { } //清空操作 arrayList.clear(); } }
1.3 LinkedList集合
底层数据使用双向链表进行储存,且每个链表结点都储存有头结点和尾结点的引用,存储的必须是对象,不能存储基础数据类型。(储存地址不连续)
LinkedList集合和ArrayList集合API方法一模一样
复制代码
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
57package com.qianfeng.cl; import java.util.LinkedList; import java.util.Iterator; import java.util.List; /** * * @Title DemoLinkedList.java * @Package com.qianfeng.cl * @Description * @author CL * @date 2020年3月5日 * @version 1.0 */ public class DemoLinkedList { public static void main(String[] args) { test(); } public static void test() { //LinkedList集合操作方法和ArrayList一模一样 List<String> linkedList = new LinkedList<String>(); //增 for(int i = 1;i < 10; i++) { linkedList.add("jack"+i); } System.out.println("--------------------------"); //删 linkedList.remove(2); //改 linkedList.set(3, "trom"); //查 //普通for循环 for(int i = 0 ;i < linkedList.size();i++) { System.out.println(linkedList.get(i)); } System.out.println("--------------------------"); //增强for循环,尽量只进行打印操作,不进行其他操作避免出现错误 for(String str:linkedList) { System.out.println(str); } System.out.println("--------------------------"); //迭代器 for(Iterator<String> iterator = linkedList.iterator(); iterator.hasNext();System.out.println(iterator.next())) { } //清空集合 linkedList.clear(); } }
1.4 ArrayList与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
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118package com.qianfeng.cl; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; /** * * @Title Test.java * @Package com.qianfeng.cl * @Description 测试速度 * @author CL * @date 2020年3月5日 * @version 1.0 */ public class Test { public static void main(String[] args) { List<Integer> arrayList = new ArrayList<Integer>(); List<Integer> linkedList = new LinkedList<Integer>(); //添加数据 test1(arrayList); test1(linkedList); //修改数据 test2(arrayList); test2(linkedList); //查询所有数据 test3(arrayList); test3(linkedList); //删除所有数据 test4(arrayList); test4(linkedList); //结果如下: //class java.util.ArrayList顺序添加耗时6ms //class java.util.LinkedList顺序添加耗时3ms //class java.util.ArrayList修改单个耗时82ms //class java.util.LinkedList修改单个耗时62ms //class java.util.ArrayList查询所有数据耗时2ms //class java.util.LinkedList查询所有数据耗时5545ms //class java.util.ArrayList删除所有数据耗时405ms //class java.util.LinkedList删除所有数据耗时2ms } //测试ArrayList和LinkedList添加数据的速度 public static void test1(List<Integer> list) { long start = System.currentTimeMillis(); for(int i = 0; i < 100000;i++) { list.add(i); } long end = System.currentTimeMillis(); System.out.println(list.getClass()+"顺序添加耗时"+(end-start)+"ms"); } //测试ArrayList和LinkedList修改数据的速度 public static void test2(List<Integer> list) { long start = System.currentTimeMillis(); for(int i = 0; i < 10000000;i++) { list.set(2,i); } long end = System.currentTimeMillis(); System.out.println(list.getClass()+"修改单个耗时"+(end-start)+"ms"); } //测试ArrayList和LinkedList查询数据的速度 public static void test3(List<Integer> list) { long start = System.currentTimeMillis(); for(int i = 0; i < list.size();i++) { list.get(i);//只查询不进行打印 } long end = System.currentTimeMillis(); System.out.println(list.getClass()+"查询所有数据耗时"+(end-start)+"ms"); } //测试ArrayList和LinkedList删除数据的速度 public static void test4(List<Integer> list) { long start = System.currentTimeMillis(); for(int i = 0; i < list.size();) { list.remove(i); } long end = System.currentTimeMillis(); System.out.println(list.getClass()+"删除所有数据耗时"+(end-start)+"ms"); } }
最后
以上就是坦率大碗最近收集整理的关于java进阶学习一之List的全部内容,更多相关java进阶学习一之List内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复