forked from IT-xzy/NEW-JAVA
-
Notifications
You must be signed in to change notification settings - Fork 0
/
20190407-B-JAVA-1.html
255 lines (198 loc) · 10.5 KB
/
20190407-B-JAVA-1.html
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
-<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>葡萄藤PPT</title>
<link rel="stylesheet" href="https://ptteng.github.io/PPT/css/reveal/reveal.css">
<!-- PPT主题,可以在/css/reveal/theme/中选择其他主题,目前暂时只能使用该模板 -->
<link rel="stylesheet" href="https://ptteng.github.io/PPT/css/reveal/theme/ptt.css">
<!-- syntax highlighting 代码高亮主题 -->
<link rel="stylesheet" href="https://ptteng.github.io/PPT/lib/reveal/css/zenburn.css">
<!-- 打印和PDF输出样式 -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? 'https://ptteng.github.io/PPT/css/reveal/print/pdf.css' : '../css/reveal/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
</head>
<body>
<img src="https://ptteng.github.io/PPT/img/demo/logo.png" alt="" usemap="#pttmap" class="base-logo">
<map name="pttmap">
<area shape="rect" coords="0,0,276,58" href="http://www.jnshu.com" alt="" target="_blank"/>
</map>
<div class="reveal">
<div class="slides">
<section>
<h2>
Map,List,Array,Set之间的关系是什么,分别适用于哪些场景,集合大家族还有哪些常见的类?</h2>
<p>分享人:孙若飞</p>
</section>
<section>
<p>1.背景介绍</p>
<p>2.知识剖析</p>
<p>3.编码实战</p>
<p>4.常见问题</p>
<p>5.参考文献</p>
<p>6.更多讨论</p>
</section>
<section>
<h3>1.背景介绍</h3>
</section>
<section>
<h3>什么是容器? </h3>
容器是用来装某一类事物的器皿,java世界里有集合和数组两种容器
</section>
<section>
<h3>2.知识剖析</h3>
</section>
<section>
<h3>集合和数组的关系?</h3>
<p>数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用。</p>
<p>集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用。 </p>
</section>
<section>
<h3>集合的关系</h3>
<img src="http://jns.img.bucket.ks3-cn-beijing.ksyun.com/skill/daily/eb274bb7-7a2f-495b-88ea-4a77e245615d.png" >
</section>
<section>
<h3>常用的集合有哪些?都有哪些特点?</h3>
<p>list</p>
<p>• 特点:有序 不唯一(可重复)</p>
<p>ArrayList 线性表中的顺序表 </p>
<p>• 在内存中分配连续的空间,实现了长度可变的数组 </p>
<p>• 优点:遍历元素和随机访问元素的效率比较高</p>
<p>• 缺点:添加和删除需大量移动元素效率低,按照内容查询效率低,</p>
</section>
<section>
<h3>常用的集合有哪些?都有哪些特点?</h3>
<p>List</p>
<p>LinkedList 线性表中双向链表 </p>
<p>• 采用双向链表存储方式。</p>
<p>• 缺点:遍历和随机访问元素效率低下 </p>
<p>• 优点:插入、删除元素效率比较高(但是前提也是必须先低效率查询才可。如果插入删除发 生在头尾可以减少查询次数</p>
</section>
<section>
<h3>常用的集合有哪些?都有哪些特点?</h3>
<p>set</p>
<p>• 特点:无序 唯一(不重复)</p>
<p>HashSet </p>
<p>• 采用Hashtable哈希表存储结构(神奇的结构)</p>
<p>• 优点:添加速度快 查询速度快 删除速度快 </p>
<p>• 缺点:无序 </p>
</section>
<section>
<h3>常用的集合有哪些?都有哪些特点?</h3>
<p>LinkedHashSet </p>
<p>• 采用哈希表存储结构,同时使用链表维护次序 </p>
<p>• 有序(添加顺序)</p>
<p>TreeSet </p>
<p>• 采用二叉树(红黑树)的存储结构 </p>
<p>• 优点:有序 查询速度比List快(按照内容查询)</p>
<p>• 缺点:查询速度没有HashSet快</p>
</section>
<section>
<h3>常用的集合有哪些?都有哪些特点?</h3>
<p> Map</p>
<p> • 特点 key-value映射</p>
<p> HashMap </p>
<p> • Key无序 唯一 (Set)</p>
<p>• Value 无序 不唯一 (Collection)</p>
<p>LinkedHashMap </p>
<p> • 有序的HashMap 速度快</p>
<p> TreeMap</p>
<p> • 有序 速度没有hash快 </p>
</section>
<section>
<h3>Iterator是什么?能做什么?</h3>
<p>Iterator 是一个接口,所有实现了conllection接口的容器类都有一个iterator方法,用以返回一个实现了Iterator接口的对象,Iterator对象称做迭代器,用以对容器内元素进行遍历.</p>
<p>也就是说Iterator的作用就是为所以实现了conllection接口的容器类提供一个统一的遍历方法</p>
</section>
<section>
<h3>3.编码实战</h3>
</section>
<section>
<h3>4.常见问题</h3>
<p>ArrayList的初始化长度,扩容多少,线程安全与否,有几种遍历方式</p>
<p>默认的长度为10. </p>
<p>扩容方案是“原始容量*3/2+1"</p>
<p>ArrayList是线程不安全的,多线程情况下要使用的话,使用Vector</p>
<p>有三种:for循环,迭代器,变为数组相关的内容进行遍历</p>
</section>
<section>
<h3>4.常见问题</h3>
<p>hashCode和equals作用是什么?为什么要同时重写这两个方法?</p>
<p>(hashcode方法只有在集合中用到)返回值是一个Int类型的数,每个对象都有这个方法,也就是说,每个对象都有自己的hashcode</p>
<p>equals方法用来对比两个对象是否相等,但是需要重写,他的默认实现是==</p>
</section>
</section>
<section>
<h3>4.常见问题</h3>
<p>hashCode和equals作用是什么?为什么要同时重写这两个方法?</p>
<p>将对象放入到集合中时,首先判断要放入对象的hashcode值与集合中的任意一个元素的hashcode值是否相等,如果不相等直接将该对象放入集合中。
如果hashcode值相等,然后再通过equals方法判断要放入对象与集合中的任意一个对象是否相等,
如果equals判断不相等,直接将该元素放入到集合中,否则不放入。(不然只使用equals方法对比,效率太低)</p>
</section>
</section>
<section>
<h3>4.常见问题</h3>
<p>equals与==不同的是</p>
<p>1)对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;如果作用于引用类型的变量,则比较的是所指向的对象的地址</p>
</section>
</section>
<section>
<h3>4.常见问题</h3>
<p>equals与==不同的是</p>
<p>2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量
如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。</p>
</section>
<section>
<h3>5.参考资料</h3>
<P>https://www.cnblogs.com/xiohao/p/4309462.html</P>
</section>
<section>
<h3>6.更多讨论</h3>
<p></p>
</section>
<section>
<h3>鸣谢</h3>
<p>感谢观看,如有出错,恳请指正</p>
</section>
</div>
<script src="https://ptteng.github.io/PPT/lib/reveal/js/head.min.js"></script>
<script src="https://ptteng.github.io/PPT/lib/reveal/reveal.js"></script>
<script>
// 以下为常见配置属性的默认值
// {
// controls: true, // 是否在右下角展示控制条
// progress: true, // 是否显示演示的进度条
// slideNumber: false, // 是否显示当前幻灯片的页数编号,也可以使用代码slideNumber: 'c / t' ,表示当前页/总页数。
// history: false, // 是否将每个幻灯片改变加入到浏览器的历史记录中去
// keyboard: true, // 是否启用键盘快捷键来导航
// overview: true, // 是否启用幻灯片的概览模式,可使用"Esc"或"o"键来切换概览模式
// center: true, // 是否将幻灯片垂直居中
// touch: true, // 是否在触屏设备上启用触摸滑动切换
// loop: false, // 是否循环演示
// rtl: false, // 是否将演示的方向变成RTL,即从右往左
// fragments: true, // 全局开启和关闭碎片。
// autoSlide: 0, // 两个幻灯片之间自动切换的时间间隔(毫秒),当设置成 0 的时候则禁止自动切换,该值可以被幻灯片上的 ` data-autoslide` 属性覆盖
// transition: 'default', // 切换过渡效果,有none/fade/slide/convex/concave/zoom
// transitionSpeed: 'default', // 过渡速度,default/fast/slow
// mouseWheel: true, //是否启用通过鼠标滚轮来切换幻灯片
// }
// 初始化幻灯片
Reveal.initialize({
history: true,
dependencies: [
{ src: 'https://ptteng.github.io/PPT/plugin/markdown/marked.js' },
{ src: 'https://ptteng.github.io/PPT/plugin/markdown/markdown.js' },
{ src: 'https://ptteng.github.io/PPT/plugin/notes/notes.js', async: true },
{ src: 'https://ptteng.github.io/PPT/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }
]
});
</script>
</body>
</html>