我是靠谱客的博主 坦率大碗,这篇文章主要介绍java进阶学习一之List,现在分享给大家,希望可以做个参考。

List中的元素是有序的,且允许重复。重点掌握ArrayList和LinkedList

1.1 List接口相比Colleciton接口的新增方法

List接口比Collection接口中新增的几个实用方法:

  1. public Object get(int index) 根据下标,返回列表中的元素
  2. public Object add(int index, Object element);  在列表的指定位置插入指定元素.将当前处于该位置的元素(如果有的话)和所有后续元素向右移动
  3. public Object set(int index, Object element) ; 用指定元素替换列表中指定位置的元素
  4. 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
57
package 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
57
package 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
118
package 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内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(133)

评论列表共有 0 条评论

立即
投稿
返回
顶部