-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday19.html
514 lines (443 loc) · 62.4 KB
/
day19.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
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
<!DOCTYPE html>
<html>
<head> <meta charset="utf-8">
<meta name="viewport" content="width=device-width,height=device-height,initial-scale=1,user-scalable=0">
<meta name="author" content="微信公众号:颜家大少">
<meta name="email" content="[email protected]">
<meta name="description" content="一个Markdown在线转换工具,让Markdown内容,不需作任何调整就能同时在微信公众号、博客园、掘金、csdn等平台正确显示当前预览的效果">
<title>Md2All export document</title>
<style type="text/css" id="markdown_preview_css">
.output_wrapper pre code{font-family: Consolas, Inconsolata, Courier, monospace; display: block !important; white-space: pre !important; word-wrap: normal !important; word-break: normal !important; overflow: auto !important;}
.output_wrapper a:hover { text-decoration: underline; color: rgb(0, 96, 100); }
.output_wrapper figcaption { margin-top: 10px; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em; }
.output_wrapper pre code .linenum { padding-right: 20px; word-spacing: 0px; }
.task-list-list { list-style-type: none; }
.task-list-list.checked { color: rgb(62, 62, 62); }
.task-list-list.uncheck { color: rgb(191, 193, 191); }
.task-list-list .icon_uncheck, .task-list-list .icon_check { display: inline-block; vertical-align: middle; margin-right: 10px; }
.task-list-list .icon_check::before { content: "√"; border: 2px solid rgb(62, 62, 62); color: red; }
.task-list-list .icon_uncheck::before { content: "x"; border: 2px solid rgb(191, 193, 191); color: rgb(191, 193, 191); }
.task-list-list .icon_check::before, .task-list-list .icon_uncheck::before { padding: 2px 8px 2px 5px; border-radius: 5px; }
@font-face { font-family: KaTeX_AMS; src: url("fonts/KaTeX_AMS-Regular.woff2") format("woff2"), url("fonts/KaTeX_AMS-Regular.woff") format("woff"), url("fonts/KaTeX_AMS-Regular.ttf") format("truetype"); font-weight: normal; font-style: normal; }
@font-face { font-family: KaTeX_Caligraphic; src: url("fonts/KaTeX_Caligraphic-Bold.woff2") format("woff2"), url("fonts/KaTeX_Caligraphic-Bold.woff") format("woff"), url("fonts/KaTeX_Caligraphic-Bold.ttf") format("truetype"); font-weight: bold; font-style: normal; }
@font-face { font-family: KaTeX_Caligraphic; src: url("fonts/KaTeX_Caligraphic-Regular.woff2") format("woff2"), url("fonts/KaTeX_Caligraphic-Regular.woff") format("woff"), url("fonts/KaTeX_Caligraphic-Regular.ttf") format("truetype"); font-weight: normal; font-style: normal; }
@font-face { font-family: KaTeX_Fraktur; src: url("fonts/KaTeX_Fraktur-Bold.woff2") format("woff2"), url("fonts/KaTeX_Fraktur-Bold.woff") format("woff"), url("fonts/KaTeX_Fraktur-Bold.ttf") format("truetype"); font-weight: bold; font-style: normal; }
@font-face { font-family: KaTeX_Fraktur; src: url("fonts/KaTeX_Fraktur-Regular.woff2") format("woff2"), url("fonts/KaTeX_Fraktur-Regular.woff") format("woff"), url("fonts/KaTeX_Fraktur-Regular.ttf") format("truetype"); font-weight: normal; font-style: normal; }
@font-face { font-family: KaTeX_Main; src: url("fonts/KaTeX_Main-Bold.woff2") format("woff2"), url("fonts/KaTeX_Main-Bold.woff") format("woff"), url("fonts/KaTeX_Main-Bold.ttf") format("truetype"); font-weight: bold; font-style: normal; }
@font-face { font-family: KaTeX_Main; src: url("fonts/KaTeX_Main-BoldItalic.woff2") format("woff2"), url("fonts/KaTeX_Main-BoldItalic.woff") format("woff"), url("fonts/KaTeX_Main-BoldItalic.ttf") format("truetype"); font-weight: bold; font-style: italic; }
@font-face { font-family: KaTeX_Main; src: url("fonts/KaTeX_Main-Italic.woff2") format("woff2"), url("fonts/KaTeX_Main-Italic.woff") format("woff"), url("fonts/KaTeX_Main-Italic.ttf") format("truetype"); font-weight: normal; font-style: italic; }
@font-face { font-family: KaTeX_Main; src: url("fonts/KaTeX_Main-Regular.woff2") format("woff2"), url("fonts/KaTeX_Main-Regular.woff") format("woff"), url("fonts/KaTeX_Main-Regular.ttf") format("truetype"); font-weight: normal; font-style: normal; }
@font-face { font-family: KaTeX_Math; src: url("fonts/KaTeX_Math-BoldItalic.woff2") format("woff2"), url("fonts/KaTeX_Math-BoldItalic.woff") format("woff"), url("fonts/KaTeX_Math-BoldItalic.ttf") format("truetype"); font-weight: bold; font-style: italic; }
@font-face { font-family: KaTeX_Math; src: url("fonts/KaTeX_Math-Italic.woff2") format("woff2"), url("fonts/KaTeX_Math-Italic.woff") format("woff"), url("fonts/KaTeX_Math-Italic.ttf") format("truetype"); font-weight: normal; font-style: italic; }
@font-face { font-family: KaTeX_SansSerif; src: url("fonts/KaTeX_SansSerif-Bold.woff2") format("woff2"), url("fonts/KaTeX_SansSerif-Bold.woff") format("woff"), url("fonts/KaTeX_SansSerif-Bold.ttf") format("truetype"); font-weight: bold; font-style: normal; }
@font-face { font-family: KaTeX_SansSerif; src: url("fonts/KaTeX_SansSerif-Italic.woff2") format("woff2"), url("fonts/KaTeX_SansSerif-Italic.woff") format("woff"), url("fonts/KaTeX_SansSerif-Italic.ttf") format("truetype"); font-weight: normal; font-style: italic; }
@font-face { font-family: KaTeX_SansSerif; src: url("fonts/KaTeX_SansSerif-Regular.woff2") format("woff2"), url("fonts/KaTeX_SansSerif-Regular.woff") format("woff"), url("fonts/KaTeX_SansSerif-Regular.ttf") format("truetype"); font-weight: normal; font-style: normal; }
@font-face { font-family: KaTeX_Script; src: url("fonts/KaTeX_Script-Regular.woff2") format("woff2"), url("fonts/KaTeX_Script-Regular.woff") format("woff"), url("fonts/KaTeX_Script-Regular.ttf") format("truetype"); font-weight: normal; font-style: normal; }
@font-face { font-family: KaTeX_Size1; src: url("fonts/KaTeX_Size1-Regular.woff2") format("woff2"), url("fonts/KaTeX_Size1-Regular.woff") format("woff"), url("fonts/KaTeX_Size1-Regular.ttf") format("truetype"); font-weight: normal; font-style: normal; }
@font-face { font-family: KaTeX_Size2; src: url("fonts/KaTeX_Size2-Regular.woff2") format("woff2"), url("fonts/KaTeX_Size2-Regular.woff") format("woff"), url("fonts/KaTeX_Size2-Regular.ttf") format("truetype"); font-weight: normal; font-style: normal; }
@font-face { font-family: KaTeX_Size3; src: url("fonts/KaTeX_Size3-Regular.woff2") format("woff2"), url("fonts/KaTeX_Size3-Regular.woff") format("woff"), url("fonts/KaTeX_Size3-Regular.ttf") format("truetype"); font-weight: normal; font-style: normal; }
@font-face { font-family: KaTeX_Size4; src: url("fonts/KaTeX_Size4-Regular.woff2") format("woff2"), url("fonts/KaTeX_Size4-Regular.woff") format("woff"), url("fonts/KaTeX_Size4-Regular.ttf") format("truetype"); font-weight: normal; font-style: normal; }
@font-face { font-family: KaTeX_Typewriter; src: url("fonts/KaTeX_Typewriter-Regular.woff2") format("woff2"), url("fonts/KaTeX_Typewriter-Regular.woff") format("woff"), url("fonts/KaTeX_Typewriter-Regular.ttf") format("truetype"); font-weight: normal; font-style: normal; }
@media screen {
.katex .mtable .vertical-separator { min-width: 1px; }
.katex .mfrac .frac-line, .katex .overline .overline-line, .katex .underline .underline-line, .katex .hline, .katex .hdashline, .katex .rule { min-height: 1px; }
}
.katex-display { display: block; margin: 1em 0px; text-align: center; }
.katex-display > .katex { display: block; text-align: center; white-space: nowrap; }
.katex-display > .katex > .katex-html { display: block; }
.katex-display > .katex > .katex-html > .tag { position: absolute; right: 0px; }
.katex { font: 1.21em/1.2 KaTeX_Main, "Times New Roman", serif; text-indent: 0px; text-rendering: auto; }
.katex * { }
.katex .katex-mathml { position: absolute; clip: rect(1px, 1px, 1px, 1px); padding: 0px; border: 0px; height: 1px; width: 1px; overflow: hidden; }
.katex .katex-html { }
.katex .katex-html > .newline { display: block; }
.katex .base { position: relative; display: inline-block; white-space: nowrap; width: min-content; }
.katex .strut { display: inline-block; }
.katex .textbf { font-weight: bold; }
.katex .textit { font-style: italic; }
.katex .textrm { font-family: KaTeX_Main; }
.katex .textsf { font-family: KaTeX_SansSerif; }
.katex .texttt { font-family: KaTeX_Typewriter; }
.katex .mathit { font-family: KaTeX_Math; font-style: italic; }
.katex .mathrm { font-style: normal; }
.katex .mathbf { font-family: KaTeX_Main; font-weight: bold; }
.katex .boldsymbol { font-family: KaTeX_Math; font-weight: bold; font-style: italic; }
.katex .amsrm { font-family: KaTeX_AMS; }
.katex .mathbb, .katex .textbb { font-family: KaTeX_AMS; }
.katex .mathcal { font-family: KaTeX_Caligraphic; }
.katex .mathfrak, .katex .textfrak { font-family: KaTeX_Fraktur; }
.katex .mathtt { font-family: KaTeX_Typewriter; }
.katex .mathscr, .katex .textscr { font-family: KaTeX_Script; }
.katex .mathsf, .katex .textsf { font-family: KaTeX_SansSerif; }
.katex .mainit { font-family: KaTeX_Main; font-style: italic; }
.katex .mainrm { font-family: KaTeX_Main; font-style: normal; }
.katex .vlist-t { display: inline-table; table-layout: fixed; }
.katex .vlist-r { display: table-row; }
.katex .vlist { display: table-cell; vertical-align: bottom; position: relative; }
.katex .vlist > span { display: block; height: 0px; position: relative; }
.katex .vlist > span > span { display: inline-block; }
.katex .vlist > span > .pstrut { overflow: hidden; width: 0px; }
.katex .vlist-t2 { margin-right: -2px; }
.katex .vlist-s { display: table-cell; vertical-align: bottom; font-size: 1px; width: 2px; min-width: 2px; }
.katex .msupsub { text-align: left; }
.katex .mfrac > span > span { text-align: center; }
.katex .mfrac .frac-line { display: inline-block; width: 100%; border-bottom-style: solid; }
.katex .mspace { display: inline-block; }
.katex .llap, .katex .rlap, .katex .clap { width: 0px; position: relative; }
.katex .llap > .inner, .katex .rlap > .inner, .katex .clap > .inner { position: absolute; }
.katex .llap > .fix, .katex .rlap > .fix, .katex .clap > .fix { display: inline-block; }
.katex .llap > .inner { right: 0px; }
.katex .rlap > .inner, .katex .clap > .inner { left: 0px; }
.katex .clap > .inner > span { margin-left: -50%; margin-right: 50%; }
.katex .rule { display: inline-block; border: 0px solid; position: relative; }
.katex .overline .overline-line, .katex .underline .underline-line, .katex .hline { display: inline-block; width: 100%; border-bottom-style: solid; }
.katex .hdashline { display: inline-block; width: 100%; border-bottom-style: dashed; }
.katex .sqrt > .root { margin-left: 0.277778em; margin-right: -0.555556em; }
.katex .sizing, .katex .fontsize-ensurer { display: inline-block; }
.katex .sizing.reset-size1.size1, .katex .fontsize-ensurer.reset-size1.size1 { font-size: 1em; }
.katex .sizing.reset-size1.size2, .katex .fontsize-ensurer.reset-size1.size2 { font-size: 1.2em; }
.katex .sizing.reset-size1.size3, .katex .fontsize-ensurer.reset-size1.size3 { font-size: 1.4em; }
.katex .sizing.reset-size1.size4, .katex .fontsize-ensurer.reset-size1.size4 { font-size: 1.6em; }
.katex .sizing.reset-size1.size5, .katex .fontsize-ensurer.reset-size1.size5 { font-size: 1.8em; }
.katex .sizing.reset-size1.size6, .katex .fontsize-ensurer.reset-size1.size6 { font-size: 2em; }
.katex .sizing.reset-size1.size7, .katex .fontsize-ensurer.reset-size1.size7 { font-size: 2.4em; }
.katex .sizing.reset-size1.size8, .katex .fontsize-ensurer.reset-size1.size8 { font-size: 2.88em; }
.katex .sizing.reset-size1.size9, .katex .fontsize-ensurer.reset-size1.size9 { font-size: 3.456em; }
.katex .sizing.reset-size1.size10, .katex .fontsize-ensurer.reset-size1.size10 { font-size: 4.148em; }
.katex .sizing.reset-size1.size11, .katex .fontsize-ensurer.reset-size1.size11 { font-size: 4.976em; }
.katex .sizing.reset-size2.size1, .katex .fontsize-ensurer.reset-size2.size1 { font-size: 0.833333em; }
.katex .sizing.reset-size2.size2, .katex .fontsize-ensurer.reset-size2.size2 { font-size: 1em; }
.katex .sizing.reset-size2.size3, .katex .fontsize-ensurer.reset-size2.size3 { font-size: 1.16667em; }
.katex .sizing.reset-size2.size4, .katex .fontsize-ensurer.reset-size2.size4 { font-size: 1.33333em; }
.katex .sizing.reset-size2.size5, .katex .fontsize-ensurer.reset-size2.size5 { font-size: 1.5em; }
.katex .sizing.reset-size2.size6, .katex .fontsize-ensurer.reset-size2.size6 { font-size: 1.66667em; }
.katex .sizing.reset-size2.size7, .katex .fontsize-ensurer.reset-size2.size7 { font-size: 2em; }
.katex .sizing.reset-size2.size8, .katex .fontsize-ensurer.reset-size2.size8 { font-size: 2.4em; }
.katex .sizing.reset-size2.size9, .katex .fontsize-ensurer.reset-size2.size9 { font-size: 2.88em; }
.katex .sizing.reset-size2.size10, .katex .fontsize-ensurer.reset-size2.size10 { font-size: 3.45667em; }
.katex .sizing.reset-size2.size11, .katex .fontsize-ensurer.reset-size2.size11 { font-size: 4.14667em; }
.katex .sizing.reset-size3.size1, .katex .fontsize-ensurer.reset-size3.size1 { font-size: 0.714286em; }
.katex .sizing.reset-size3.size2, .katex .fontsize-ensurer.reset-size3.size2 { font-size: 0.857143em; }
.katex .sizing.reset-size3.size3, .katex .fontsize-ensurer.reset-size3.size3 { font-size: 1em; }
.katex .sizing.reset-size3.size4, .katex .fontsize-ensurer.reset-size3.size4 { font-size: 1.14286em; }
.katex .sizing.reset-size3.size5, .katex .fontsize-ensurer.reset-size3.size5 { font-size: 1.28571em; }
.katex .sizing.reset-size3.size6, .katex .fontsize-ensurer.reset-size3.size6 { font-size: 1.42857em; }
.katex .sizing.reset-size3.size7, .katex .fontsize-ensurer.reset-size3.size7 { font-size: 1.71429em; }
.katex .sizing.reset-size3.size8, .katex .fontsize-ensurer.reset-size3.size8 { font-size: 2.05714em; }
.katex .sizing.reset-size3.size9, .katex .fontsize-ensurer.reset-size3.size9 { font-size: 2.46857em; }
.katex .sizing.reset-size3.size10, .katex .fontsize-ensurer.reset-size3.size10 { font-size: 2.96286em; }
.katex .sizing.reset-size3.size11, .katex .fontsize-ensurer.reset-size3.size11 { font-size: 3.55429em; }
.katex .sizing.reset-size4.size1, .katex .fontsize-ensurer.reset-size4.size1 { font-size: 0.625em; }
.katex .sizing.reset-size4.size2, .katex .fontsize-ensurer.reset-size4.size2 { font-size: 0.75em; }
.katex .sizing.reset-size4.size3, .katex .fontsize-ensurer.reset-size4.size3 { font-size: 0.875em; }
.katex .sizing.reset-size4.size4, .katex .fontsize-ensurer.reset-size4.size4 { font-size: 1em; }
.katex .sizing.reset-size4.size5, .katex .fontsize-ensurer.reset-size4.size5 { font-size: 1.125em; }
.katex .sizing.reset-size4.size6, .katex .fontsize-ensurer.reset-size4.size6 { font-size: 1.25em; }
.katex .sizing.reset-size4.size7, .katex .fontsize-ensurer.reset-size4.size7 { font-size: 1.5em; }
.katex .sizing.reset-size4.size8, .katex .fontsize-ensurer.reset-size4.size8 { font-size: 1.8em; }
.katex .sizing.reset-size4.size9, .katex .fontsize-ensurer.reset-size4.size9 { font-size: 2.16em; }
.katex .sizing.reset-size4.size10, .katex .fontsize-ensurer.reset-size4.size10 { font-size: 2.5925em; }
.katex .sizing.reset-size4.size11, .katex .fontsize-ensurer.reset-size4.size11 { font-size: 3.11em; }
.katex .sizing.reset-size5.size1, .katex .fontsize-ensurer.reset-size5.size1 { font-size: 0.555556em; }
.katex .sizing.reset-size5.size2, .katex .fontsize-ensurer.reset-size5.size2 { font-size: 0.666667em; }
.katex .sizing.reset-size5.size3, .katex .fontsize-ensurer.reset-size5.size3 { font-size: 0.777778em; }
.katex .sizing.reset-size5.size4, .katex .fontsize-ensurer.reset-size5.size4 { font-size: 0.888889em; }
.katex .sizing.reset-size5.size5, .katex .fontsize-ensurer.reset-size5.size5 { font-size: 1em; }
.katex .sizing.reset-size5.size6, .katex .fontsize-ensurer.reset-size5.size6 { font-size: 1.11111em; }
.katex .sizing.reset-size5.size7, .katex .fontsize-ensurer.reset-size5.size7 { font-size: 1.33333em; }
.katex .sizing.reset-size5.size8, .katex .fontsize-ensurer.reset-size5.size8 { font-size: 1.6em; }
.katex .sizing.reset-size5.size9, .katex .fontsize-ensurer.reset-size5.size9 { font-size: 1.92em; }
.katex .sizing.reset-size5.size10, .katex .fontsize-ensurer.reset-size5.size10 { font-size: 2.30444em; }
.katex .sizing.reset-size5.size11, .katex .fontsize-ensurer.reset-size5.size11 { font-size: 2.76444em; }
.katex .sizing.reset-size6.size1, .katex .fontsize-ensurer.reset-size6.size1 { font-size: 0.5em; }
.katex .sizing.reset-size6.size2, .katex .fontsize-ensurer.reset-size6.size2 { font-size: 0.6em; }
.katex .sizing.reset-size6.size3, .katex .fontsize-ensurer.reset-size6.size3 { font-size: 0.7em; }
.katex .sizing.reset-size6.size4, .katex .fontsize-ensurer.reset-size6.size4 { font-size: 0.8em; }
.katex .sizing.reset-size6.size5, .katex .fontsize-ensurer.reset-size6.size5 { font-size: 0.9em; }
.katex .sizing.reset-size6.size6, .katex .fontsize-ensurer.reset-size6.size6 { font-size: 1em; }
.katex .sizing.reset-size6.size7, .katex .fontsize-ensurer.reset-size6.size7 { font-size: 1.2em; }
.katex .sizing.reset-size6.size8, .katex .fontsize-ensurer.reset-size6.size8 { font-size: 1.44em; }
.katex .sizing.reset-size6.size9, .katex .fontsize-ensurer.reset-size6.size9 { font-size: 1.728em; }
.katex .sizing.reset-size6.size10, .katex .fontsize-ensurer.reset-size6.size10 { font-size: 2.074em; }
.katex .sizing.reset-size6.size11, .katex .fontsize-ensurer.reset-size6.size11 { font-size: 2.488em; }
.katex .sizing.reset-size7.size1, .katex .fontsize-ensurer.reset-size7.size1 { font-size: 0.416667em; }
.katex .sizing.reset-size7.size2, .katex .fontsize-ensurer.reset-size7.size2 { font-size: 0.5em; }
.katex .sizing.reset-size7.size3, .katex .fontsize-ensurer.reset-size7.size3 { font-size: 0.583333em; }
.katex .sizing.reset-size7.size4, .katex .fontsize-ensurer.reset-size7.size4 { font-size: 0.666667em; }
.katex .sizing.reset-size7.size5, .katex .fontsize-ensurer.reset-size7.size5 { font-size: 0.75em; }
.katex .sizing.reset-size7.size6, .katex .fontsize-ensurer.reset-size7.size6 { font-size: 0.833333em; }
.katex .sizing.reset-size7.size7, .katex .fontsize-ensurer.reset-size7.size7 { font-size: 1em; }
.katex .sizing.reset-size7.size8, .katex .fontsize-ensurer.reset-size7.size8 { font-size: 1.2em; }
.katex .sizing.reset-size7.size9, .katex .fontsize-ensurer.reset-size7.size9 { font-size: 1.44em; }
.katex .sizing.reset-size7.size10, .katex .fontsize-ensurer.reset-size7.size10 { font-size: 1.72833em; }
.katex .sizing.reset-size7.size11, .katex .fontsize-ensurer.reset-size7.size11 { font-size: 2.07333em; }
.katex .sizing.reset-size8.size1, .katex .fontsize-ensurer.reset-size8.size1 { font-size: 0.347222em; }
.katex .sizing.reset-size8.size2, .katex .fontsize-ensurer.reset-size8.size2 { font-size: 0.416667em; }
.katex .sizing.reset-size8.size3, .katex .fontsize-ensurer.reset-size8.size3 { font-size: 0.486111em; }
.katex .sizing.reset-size8.size4, .katex .fontsize-ensurer.reset-size8.size4 { font-size: 0.555556em; }
.katex .sizing.reset-size8.size5, .katex .fontsize-ensurer.reset-size8.size5 { font-size: 0.625em; }
.katex .sizing.reset-size8.size6, .katex .fontsize-ensurer.reset-size8.size6 { font-size: 0.694444em; }
.katex .sizing.reset-size8.size7, .katex .fontsize-ensurer.reset-size8.size7 { font-size: 0.833333em; }
.katex .sizing.reset-size8.size8, .katex .fontsize-ensurer.reset-size8.size8 { font-size: 1em; }
.katex .sizing.reset-size8.size9, .katex .fontsize-ensurer.reset-size8.size9 { font-size: 1.2em; }
.katex .sizing.reset-size8.size10, .katex .fontsize-ensurer.reset-size8.size10 { font-size: 1.44028em; }
.katex .sizing.reset-size8.size11, .katex .fontsize-ensurer.reset-size8.size11 { font-size: 1.72778em; }
.katex .sizing.reset-size9.size1, .katex .fontsize-ensurer.reset-size9.size1 { font-size: 0.289352em; }
.katex .sizing.reset-size9.size2, .katex .fontsize-ensurer.reset-size9.size2 { font-size: 0.347222em; }
.katex .sizing.reset-size9.size3, .katex .fontsize-ensurer.reset-size9.size3 { font-size: 0.405093em; }
.katex .sizing.reset-size9.size4, .katex .fontsize-ensurer.reset-size9.size4 { font-size: 0.462963em; }
.katex .sizing.reset-size9.size5, .katex .fontsize-ensurer.reset-size9.size5 { font-size: 0.520833em; }
.katex .sizing.reset-size9.size6, .katex .fontsize-ensurer.reset-size9.size6 { font-size: 0.578704em; }
.katex .sizing.reset-size9.size7, .katex .fontsize-ensurer.reset-size9.size7 { font-size: 0.694444em; }
.katex .sizing.reset-size9.size8, .katex .fontsize-ensurer.reset-size9.size8 { font-size: 0.833333em; }
.katex .sizing.reset-size9.size9, .katex .fontsize-ensurer.reset-size9.size9 { font-size: 1em; }
.katex .sizing.reset-size9.size10, .katex .fontsize-ensurer.reset-size9.size10 { font-size: 1.20023em; }
.katex .sizing.reset-size9.size11, .katex .fontsize-ensurer.reset-size9.size11 { font-size: 1.43981em; }
.katex .sizing.reset-size10.size1, .katex .fontsize-ensurer.reset-size10.size1 { font-size: 0.24108em; }
.katex .sizing.reset-size10.size2, .katex .fontsize-ensurer.reset-size10.size2 { font-size: 0.289296em; }
.katex .sizing.reset-size10.size3, .katex .fontsize-ensurer.reset-size10.size3 { font-size: 0.337512em; }
.katex .sizing.reset-size10.size4, .katex .fontsize-ensurer.reset-size10.size4 { font-size: 0.385728em; }
.katex .sizing.reset-size10.size5, .katex .fontsize-ensurer.reset-size10.size5 { font-size: 0.433944em; }
.katex .sizing.reset-size10.size6, .katex .fontsize-ensurer.reset-size10.size6 { font-size: 0.48216em; }
.katex .sizing.reset-size10.size7, .katex .fontsize-ensurer.reset-size10.size7 { font-size: 0.578592em; }
.katex .sizing.reset-size10.size8, .katex .fontsize-ensurer.reset-size10.size8 { font-size: 0.694311em; }
.katex .sizing.reset-size10.size9, .katex .fontsize-ensurer.reset-size10.size9 { font-size: 0.833173em; }
.katex .sizing.reset-size10.size10, .katex .fontsize-ensurer.reset-size10.size10 { font-size: 1em; }
.katex .sizing.reset-size10.size11, .katex .fontsize-ensurer.reset-size10.size11 { font-size: 1.19961em; }
.katex .sizing.reset-size11.size1, .katex .fontsize-ensurer.reset-size11.size1 { font-size: 0.200965em; }
.katex .sizing.reset-size11.size2, .katex .fontsize-ensurer.reset-size11.size2 { font-size: 0.241158em; }
.katex .sizing.reset-size11.size3, .katex .fontsize-ensurer.reset-size11.size3 { font-size: 0.28135em; }
.katex .sizing.reset-size11.size4, .katex .fontsize-ensurer.reset-size11.size4 { font-size: 0.321543em; }
.katex .sizing.reset-size11.size5, .katex .fontsize-ensurer.reset-size11.size5 { font-size: 0.361736em; }
.katex .sizing.reset-size11.size6, .katex .fontsize-ensurer.reset-size11.size6 { font-size: 0.401929em; }
.katex .sizing.reset-size11.size7, .katex .fontsize-ensurer.reset-size11.size7 { font-size: 0.482315em; }
.katex .sizing.reset-size11.size8, .katex .fontsize-ensurer.reset-size11.size8 { font-size: 0.578778em; }
.katex .sizing.reset-size11.size9, .katex .fontsize-ensurer.reset-size11.size9 { font-size: 0.694534em; }
.katex .sizing.reset-size11.size10, .katex .fontsize-ensurer.reset-size11.size10 { font-size: 0.833601em; }
.katex .sizing.reset-size11.size11, .katex .fontsize-ensurer.reset-size11.size11 { font-size: 1em; }
.katex .delimsizing.size1 { font-family: KaTeX_Size1; }
.katex .delimsizing.size2 { font-family: KaTeX_Size2; }
.katex .delimsizing.size3 { font-family: KaTeX_Size3; }
.katex .delimsizing.size4 { font-family: KaTeX_Size4; }
.katex .delimsizing.mult .delim-size1 > span { font-family: KaTeX_Size1; }
.katex .delimsizing.mult .delim-size4 > span { font-family: KaTeX_Size4; }
.katex .nulldelimiter { display: inline-block; width: 0.12em; }
.katex .delimcenter { position: relative; }
.katex .op-symbol { position: relative; }
.katex .op-symbol.small-op { font-family: KaTeX_Size1; }
.katex .op-symbol.large-op { font-family: KaTeX_Size2; }
.katex .op-limits > .vlist-t { text-align: center; }
.katex .accent > .vlist-t { text-align: center; }
.katex .accent .accent-body:not(.accent-full) { width: 0px; }
.katex .accent .accent-body { position: relative; }
.katex .overlay { display: block; }
.katex .mtable .vertical-separator { display: inline-block; margin: 0px -0.025em; border-right: 0.05em solid; }
.katex .mtable .vs-dashed { border-right: 0.05em dashed; }
.katex .mtable .arraycolsep { display: inline-block; }
.katex .mtable .col-align-c > .vlist-t { text-align: center; }
.katex .mtable .col-align-l > .vlist-t { text-align: left; }
.katex .mtable .col-align-r > .vlist-t { text-align: right; }
.katex .svg-align { text-align: left; }
.katex svg, .screenShotTempCanvas { display: block; position: absolute; width: 100%; height: inherit; fill: currentcolor; stroke: currentcolor; fill-rule: nonzero; fill-opacity: 1; stroke-width: 1; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0; stroke-opacity: 1; }
.katex svg path { stroke: none; }
.katex .stretchy { width: 100%; display: block; position: relative; overflow: hidden; }
.katex .stretchy::before, .katex .stretchy::after { content: ""; }
.katex .hide-tail { width: 100%; position: relative; overflow: hidden; }
.katex .halfarrow-left { position: absolute; left: 0px; width: 50.2%; overflow: hidden; }
.katex .halfarrow-right { position: absolute; right: 0px; width: 50.2%; overflow: hidden; }
.katex .brace-left { position: absolute; left: 0px; width: 25.1%; overflow: hidden; }
.katex .brace-center { position: absolute; left: 25%; width: 50%; overflow: hidden; }
.katex .brace-right { position: absolute; right: 0px; width: 25.1%; overflow: hidden; }
.katex .x-arrow-pad { padding: 0px 0.5em; }
.katex .x-arrow, .katex .mover, .katex .munder { text-align: center; }
.katex .boxpad { padding: 0px 0.3em; }
.katex .fbox { box-sizing: border-box; border: 0.04em solid black; }
.katex .fcolorbox { box-sizing: border-box; border: 0.04em solid; }
.katex .cancel-pad { padding: 0px 0.2em; }
.katex .cancel-lap { margin-left: -0.2em; margin-right: -0.2em; }
.katex .sout { border-bottom-style: solid; border-bottom-width: 0.08em; }
.output_wrapper pre code { display: -webkit-box !important; }
.output_wrapper .hljs{display: block; overflow-x: auto; padding: 0.5em; background: rgb(30, 30, 30); color: rgb(220, 220, 220);}
.output_wrapper .hljs-keyword,.output_wrapper .hljs-literal,.output_wrapper .hljs-symbol,.output_wrapper .hljs-name{color: rgb(86, 156, 214);}
.output_wrapper .hljs-link{color: rgb(86, 156, 214); text-decoration: underline;}
.output_wrapper .hljs-built_in,.output_wrapper .hljs-type{color: rgb(78, 201, 176);}
.output_wrapper .hljs-number,.output_wrapper .hljs-class{color: rgb(184, 215, 163);}
.output_wrapper .hljs-string,.output_wrapper .hljs-meta-string{color: rgb(214, 157, 133);}
.output_wrapper .hljs-regexp,.output_wrapper .hljs-template-tag{color: rgb(154, 83, 52);}
.output_wrapper .hljs-subst,.output_wrapper .hljs-function,.output_wrapper .hljs-title,.output_wrapper .hljs-params,.output_wrapper .hljs-formula{color: rgb(220, 220, 220);}
.output_wrapper .hljs-comment,.output_wrapper .hljs-quote{color: rgb(87, 166, 74); font-style: italic;}
.output_wrapper .hljs-doctag{color: rgb(96, 139, 78);}
.output_wrapper .hljs-meta,.output_wrapper .hljs-meta-keyword,.output_wrapper .hljs-tag{color: rgb(155, 155, 155);}
.output_wrapper .hljs-variable,.output_wrapper .hljs-template-variable{color: rgb(189, 99, 197);}
.output_wrapper .hljs-attr,.output_wrapper .hljs-attribute,.output_wrapper .hljs-builtin-name{color: rgb(156, 220, 254);}
.output_wrapper .hljs-section{color: gold;}
.output_wrapper .hljs-emphasis{font-style: italic;}
.output_wrapper .hljs-strong{font-weight: bold;}
.output_wrapper .hljs-bullet,.output_wrapper .hljs-selector-tag,.output_wrapper .hljs-selector-id,.output_wrapper .hljs-selector-class,.output_wrapper .hljs-selector-attr,.output_wrapper .hljs-selector-pseudo{color: rgb(215, 186, 125);}
.output_wrapper .hljs-addition{background-color: rgb(20, 66, 18); display: inline-block; width: 100%;}
.output_wrapper .hljs-deletion{background-color: rgb(102, 0, 0); display: inline-block; width: 100%;}
.output_wrapper pre code {line-height: 18px; font-size: 14px; font-weight: normal; word-spacing: 0px; letter-spacing: 0px;}
.output_wrapper{font-size: 16px; color: rgb(62, 62, 62); line-height: 1.6; word-spacing: 0px; letter-spacing: 0px; font-family: "Helvetica Neue", Helvetica, "Hiragino Sans GB", "Microsoft YaHei", Arial, sans-serif;}
.output_wrapper *{font-size: inherit; color: inherit; line-height: inherit; margin: 0px; padding: 0px;}
.output_wrapper p{margin: 1.5em 0px;}
.output_wrapper h1,.output_wrapper h2,.output_wrapper h3,.output_wrapper h4,.output_wrapper h5,.output_wrapper h6{margin: 1.5em 0px; font-weight: bold;}
.output_wrapper h1{font-size: 1.6em;}
.output_wrapper h2{font-size: 1.4em;}
.output_wrapper h3{font-size: 1.3em;}
.output_wrapper h4{font-size: 1.2em;}
.output_wrapper h5{font-size: 1em;}
.output_wrapper h6{font-size: 1em;}
.output_wrapper h3{margin-bottom: 2em; margin-right: 5px; padding: 8px 15px; letter-spacing: 2px; background-image: linear-gradient(to right bottom, rgb(0, 188, 212), rgb(63, 81, 181)); background-color: rgb(63, 81, 181); color: rgb(255, 255, 255); border-left: 10px solid rgb(51, 51, 51); border-radius: 5px; text-shadow: rgb(102, 102, 102) 1px 1px 1px; box-shadow: rgb(102, 102, 102) 1px 1px 2px;}
.output_wrapper ul,.output_wrapper ol{padding-left: 32px;}
.output_wrapper ul{list-style-type: disc;}
.output_wrapper ol{list-style-type: decimal;}
.output_wrapper li *{}
.output_wrapper li{margin-bottom: 0.5em;}
.output_wrapper .code_size_default{line-height: 18px; font-size: 14px; font-weight: normal; word-spacing: 0px; letter-spacing: 0px;}
.output_wrapper .code_size_tight{line-height: 15px; font-size: 11px; font-weight: normal; word-spacing: -3px; letter-spacing: 0px;}
.output_wrapper pre code{font-family: Consolas, Inconsolata, Courier, monospace; border-radius: 0px;}
.output_wrapper blockquote{display: block; padding: 15px 15px 15px 1rem; font-size: 0.9em; margin: 1em 0px; color: rgb(129, 145, 152); border-left: 6px solid rgb(220, 230, 240); background: rgb(242, 247, 251); overflow: auto; overflow-wrap: normal; word-break: normal;}
.output_wrapper blockquote p{margin: 0px;}
.output_wrapper a{text-decoration: none; color: rgb(30, 107, 184); overflow-wrap: break-word;}
.output_wrapper strong{font-weight: bold;}
.output_wrapper em{font-style: italic;}
.output_wrapper del{font-style: italic;}
.output_wrapper strong em{font-weight: bold;}
.output_wrapper hr{height: 1px; margin: 1.5rem 0px; border-right: none; border-bottom: none; border-left: none; border-image: initial; border-top: 1px dashed rgb(165, 165, 165);}
.output_wrapper code{overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(233, 105, 0); background: rgb(248, 248, 248);}
.output_wrapper img{display: block; margin: 0px auto; max-width: 100%;}
.output_wrapper figcaption{margin-top: 10px; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;}
.output_wrapper table{display: table; width: 100%; text-align: left;}
.output_wrapper tbody{border: 0px;}
.output_wrapper table tr{border-width: 1px 0px 0px; border-right-style: initial; border-bottom-style: initial; border-left-style: initial; border-right-color: initial; border-bottom-color: initial; border-left-color: initial; border-image: initial; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: white;}
.output_wrapper table tr th,.output_wrapper table tr td{font-size: 1em; border: 1px solid rgb(204, 204, 204); padding: 0.5em 1em; text-align: left;}
.output_wrapper table tr th{font-weight: bold; background-color: rgb(240, 240, 240);}
.output_wrapper .katex-display{font-size: 1.22em;}
.output_wrapper .katex{padding: 8px 3px;}
.output_wrapper .katex-display > .katex{display: inline-block; text-align: center; padding: 3px;}
.output_wrapper .katex img{display: inline-block; vertical-align: middle;}
.output_wrapper a[href^="#"] sup{vertical-align: super; margin: 0px 2px; padding: 1px 3px; color: rgb(255, 255, 255); background: rgb(102, 102, 102); font-size: 0.7em;}
.output_wrapper .task-list-list{list-style-type: none;}
.output_wrapper .task-list-list.checked{color: rgb(62, 62, 62);}
.output_wrapper .task-list-list.uncheck{color: rgb(191, 193, 191);}
.output_wrapper .task-list-list .icon_uncheck,.output_wrapper .task-list-list .icon_check{display: inline-block; vertical-align: middle; margin-right: 10px;}
.output_wrapper .task-list-list .icon_check::before{content: "√"; border: 2px solid rgb(62, 62, 62); color: red;}
.output_wrapper .task-list-list .icon_uncheck::before{content: "x"; border: 2px solid rgb(191, 193, 191); color: rgb(191, 193, 191);}
.output_wrapper .task-list-list .icon_check::before,.output_wrapper .task-list-list .icon_uncheck::before{padding: 2px 8px 2px 5px; border-radius: 5px;}
.output_wrapper .toc{margin-left: 25px;}
.output_wrapper .toc_item{display: block;}
.output_wrapper .toc_left{margin-left: 25px;}
</style>
<style type="text/css" id="export_setting_css">body { width: 100%; margin: 0px; padding: 0px; background: rgb(81, 154, 178); }
#export_content { margin: 40px 20%; padding: 20px; border: 1px solid rgb(149, 155, 111); background: rgb(255, 255, 255); }</style>
</head><body><div id="export_content"><div class="output_wrapper" id="output_wrapper_id"><h1 id="hday19"><span>day19</span></h1>
<h2 id="htreemap"><span>TreeMap</span></h2>
<p>底层:红黑树<br> 优缺点: 维护数据的大小 (有序) ,添加速度和删除速度高于ArrayList 比其他的都低<br> 查询速度高于List 低于Hash。<br> 如果对于存储的数据有 排序的要求,那么首选TreeMap。<br> 如果存储的元素需要按照指定的需求进行排序,创建TreeMap对象时 指定比较器。</p>
<p>存入自定义对象和TreeSet一样,1:要么自定义对象的所属类 实现了内部比较器Comparable接口 重写 compareTo方法<br> 2:要么创建TreeMap对象是 指定外部比较器Comparetor接口 重写compare方法</p>
<p>迭代和HashMap一样,两种方式:</p>
<p>1.获取键 迭代键的过程中通过get方法获取值</p>
<p>2.获取Entry对象,通过getKey和getValue获取键和值</p>
<h2 id="hcollections"><span>Collections</span></h2>
<p>针对集合操作</p>
<p>jdk1.9:</p>
<p> 只能没有构造器 非静态方法一定是私有的 </p>
<p>default方法 class interface 方法 变量 </p>
<p> Collections通过了一组方法 synchronizedXXX(XXX) </p>
<p> 该组方法可以针对传入的集合对象 做线程同步,返回能够同步的线程安全的集合对象</p>
<p> 不一定是线程安全的。 及其特殊的情况下会发生问题。</p>
<p> 解决办法:</p>
<p>concurrent包下的同步集合实现 同步集合在jdk1.8之后采用分段锁机制完成对于数据的加锁操作 提高效率</p>
<pre><code class="java language-java hljs"><span class="linenum hljs-number"> 1</span><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Test01</span> </span>{<br><span class="linenum hljs-number"> 2</span> <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{<br><span class="linenum hljs-number"> 3</span><br><span class="linenum hljs-number"> 4</span> <span class="hljs-comment">//使用Collections</span><br><span class="linenum hljs-number"> 5</span> List<String> ls = <span class="hljs-keyword">new</span> ArrayList<>();<br><span class="linenum hljs-number"> 6</span><br><span class="linenum hljs-number"> 7</span> Collections.sort(ls);<br><span class="linenum hljs-number"> 8</span><br><span class="linenum hljs-number"> 9</span> <span class="hljs-comment">//添加元素到集合中去</span><br><span class="linenum hljs-number">10</span> Collections.addAll(ls,<span class="hljs-string">"heihei"</span>,<span class="hljs-string">"hehe"</span>,<span class="hljs-string">"xixi"</span> );<br><span class="linenum hljs-number">11</span><br><span class="linenum hljs-number">12</span><br><span class="linenum hljs-number">13</span> <span class="hljs-comment">//使用binarySearch查找元素 一定要先排序 返回的是排序之后的元素索引位置</span><br><span class="linenum hljs-number">14</span> System.out.println(Collections.binarySearch(ls, <span class="hljs-string">"heihei"</span>));<br><span class="linenum hljs-number">15</span><br><span class="linenum hljs-number">16</span> System.out.println(ls);<br><span class="linenum hljs-number">17</span> <span class="hljs-comment">//对于集合中的元素进行排序</span><br><span class="linenum hljs-number">18</span> Collections.sort(ls);<span class="hljs-comment">//[hehe, heihei, xixi]</span><br><span class="linenum hljs-number">19</span><br><span class="linenum hljs-number">20</span><br><span class="linenum hljs-number">21</span> System.out.println(Collections.binarySearch(ls, <span class="hljs-string">"heihei"</span>));<br><span class="linenum hljs-number">22</span><br><span class="linenum hljs-number">23</span> System.out.println(ls);<br><span class="linenum hljs-number">24</span><br><span class="linenum hljs-number">25</span> <span class="hljs-comment">//Collections.fill(ls, "dundun");</span><br><span class="linenum hljs-number">26</span><br><span class="linenum hljs-number">27</span> Collections.shuffle(ls);<br><span class="linenum hljs-number">28</span><br><span class="linenum hljs-number">29</span> System.out.println(ls);<br><span class="linenum hljs-number">30</span><br><span class="linenum hljs-number">31</span> Collections.reverse(ls);<br><span class="linenum hljs-number">32</span> System.out.println(ls);<br><span class="linenum hljs-number">33</span> }<br><span class="linenum hljs-number">34</span>}<br></code></pre>
<h2 id="harrays"><span>Arrays</span></h2>
<p>针对数组</p>
<p>Arrays.asList 返回的是Arrays类中的内部类ArrayList </p>
<p>而这个类的对象是不允许添加以及删除元素的,也就是返回的集合对象是一个长度不可变的ArrayList。</p>
<ul>
<li><span>toArray -> 集合转数组</span></li>
<li><span>asList -> 数组转集合</span></li>
</ul>
<pre><code class="java language-java hljs"><span class="linenum hljs-number"> 1</span><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Test02</span> </span>{<br><span class="linenum hljs-number"> 2</span> <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{<br><span class="linenum hljs-number"> 3</span> String[] strs = <span class="hljs-keyword">new</span> String[] {<span class="hljs-string">"J"</span>,<span class="hljs-string">"Q"</span>,<span class="hljs-string">"K"</span>,<span class="hljs-string">"A"</span>};<br><span class="linenum hljs-number"> 4</span> List<String> ls = Arrays.asList(strs);<br><span class="linenum hljs-number"> 5</span><br><span class="linenum hljs-number"> 6</span> System.out.println(ls);<br><span class="linenum hljs-number"> 7</span><br><span class="linenum hljs-number"> 8</span> <span class="hljs-comment">//ls.remove("A");</span><br><span class="linenum hljs-number"> 9</span> <span class="hljs-comment">//ls.remove(1);</span><br><span class="linenum hljs-number">10</span> System.out.println(ls);<br><span class="linenum hljs-number">11</span><br><span class="linenum hljs-number">12</span> <span class="hljs-comment">//查找 sort fill copy copyRange toString</span><br><span class="linenum hljs-number">13</span> Arrays.sort(strs);<br><span class="linenum hljs-number">14</span> System.out.println(Arrays.toString(strs));<br><span class="linenum hljs-number">15</span><br><span class="linenum hljs-number">16</span> System.out.println(Arrays.binarySearch(strs, <span class="hljs-string">"J"</span>));<br><span class="linenum hljs-number">17</span><br><span class="linenum hljs-number">18</span> Arrays.fill(strs, <span class="hljs-string">"小猫"</span>);<br><span class="linenum hljs-number">19</span> System.out.println(Arrays.toString(strs));<br><span class="linenum hljs-number">20</span><br><span class="linenum hljs-number">21</span> strs = Arrays.copyOf(strs, strs.length);<br><span class="linenum hljs-number">22</span> System.out.println(Arrays.toString(strs));<br><span class="linenum hljs-number">23</span><br><span class="linenum hljs-number">24</span> strs = Arrays.copyOfRange(strs, <span class="hljs-number">0</span>, <span class="hljs-number">2</span>);<br><span class="linenum hljs-number">25</span> System.out.println(Arrays.toString(strs));<br><span class="linenum hljs-number">26</span><br><span class="linenum hljs-number">27</span> List<String> lls = <span class="hljs-keyword">new</span> ArrayList<>();<br><span class="linenum hljs-number">28</span> Object[] objs = lls.toArray();<br><span class="linenum hljs-number">29</span> System.out.println(Arrays.toString(objs));<br><span class="linenum hljs-number">30</span> }<br><span class="linenum hljs-number">31</span>}<br></code></pre>
<h2 id="h"><span>线程</span></h2>
<table>
<thead>
<tr>
<th>之间区别</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>程序</strong>(program)是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合。为实现预期目的而进行操作的一系列语句和指令。一般分为系统程序和应用程序两大类。计算机中的程序在港澳台地区称为程式。程序就是为使电子计算机执行一个或多个操作,或执行某一任务,按序设计的计算机指令的集合。</td>
</tr>
<tr>
<td><strong>进程</strong>(有时被称为重量级进程)是程序的一次执行。每个进程都有自己的地址空间,内存,数据栈以及其它记录其运行轨迹的辅助数据。操作系统管理在其上运行的所有进程,并为这些进程公平地分配时间。</td>
</tr>
<tr>
<td><strong>线程</strong>,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。</td>
</tr>
</tbody>
</table>
<h3 id="h-1"><span>线程与进程的区别可以归纳为以下几点:</span></h3>
<p>1)地址空间和其它资源(如打开文件):进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。</p>
<p>2)通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。</p>
<p>3)调度和切换:线程上下文切换比进程上下文切换要快得多。</p>
<p>4)在多线程OS中,进程不是一个可执行的实体。</p>
<blockquote>
<p>为什么需要多线程而不是多进程进行通信或者执行?</p>
</blockquote>
<p>简单的线程,多个线程同时执行,但各个线程处理的任务毫不相干,没有数据和资源的共享,不会出现争抢资源的情况。这种情况下不管有多少个线程同时执行都是安全的<br>复杂的线程,多个线程共享相同的数据或资源,就会出现多个线程争抢一个资源的情况。这时就容易造成数据的非预期(错误)处理,是线程不安全的</p>
<blockquote>
</blockquote>
<h3 id="h-2"><span>多线程的优势</span></h3>
<ol>
<li><span>发挥处理器的强大能力</span></li>
</ol>
<p>在多处理器上,多线程可以通过提高处理器资源的利用率来提高系统的吞吐率。</p>
<p>在单处理器系统上也可以获得更高的吞吐率,比如说多线程程序在等待某个同步I/O操作时,还有其他线程可以继续运行。</p>
<ol start="2">
<li><span>建模的简单性</span></li>
</ol>
<p>完成单任务时,很简单,只要把这件事做好就行。但是在完成多任务的时候,不仅要把活干好,还要考虑不同任务之间存在优先级和时间。</p>
<ol start="3">
<li><span>异步事件的简化处理</span></li>
</ol>
<p>一部分线程接受客户端请求,另一部分处理器请求。如果是单线程程序的话,处理请求时会停顿导致接受请求阻塞,为了避免这个问题单线程程序必须使用非阻塞的I/O,这种I/O的复杂性要远远高于同步I/O。</p>
<p>4.响应灵敏的用户界面</p>
<h3 id="h-3"><span>创建线程</span></h3>
<p>1.继承Thread类创建线程类</p>
<p>(1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。</p>
<p>(2)创建Thread子类的实例,即创建了线程对象。</p>
<p>(3)调用线程对象的start()方法来启动该线程。</p>
<p>2.通过Runnable接口创建线程类</p>
<p>(1)定义runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。</p>
<p>(2)创建 Runnable实现类的实例,并依此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。</p>
<p>(3)调用线程对象的start()方法来启动该线程。</p>
<p>3.通过Callable和Future创建线程</p>
<p>(1)创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且有返回值。</p>
<p>(2)创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值。</p>
<p>(3)使用FutureTask对象作为Thread对象的target创建并启动新线程。</p>
<p>(4)调用FutureTask对象的get()方法来获得子线程执行结束后的返回值</p>
<pre><code class="java language-java hljs"><span class="linenum hljs-number"> 1</span><span class="hljs-comment">//1</span><br><span class="linenum hljs-number"> 2</span><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Test02</span> </span>{<br><span class="linenum hljs-number"> 3</span> <span class="hljs-comment">// main方法中的线程 称之为主线程</span><br><span class="linenum hljs-number"> 4</span> <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{<br><span class="linenum hljs-number"> 5</span> <span class="hljs-comment">//开启自定义的线程</span><br><span class="linenum hljs-number"> 6</span> MyT t = <span class="hljs-keyword">new</span> MyT();<br><span class="linenum hljs-number"> 7</span> t.start();<br><span class="linenum hljs-number"> 8</span> }<br><span class="linenum hljs-number"> 9</span>}<br><span class="linenum hljs-number">10</span><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MyT</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Thread</span></span>{<br><span class="linenum hljs-number">11</span> <span class="hljs-meta">@Override</span><br><span class="linenum hljs-number">12</span> <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">run</span><span class="hljs-params">()</span> </span>{<br><span class="linenum hljs-number">13</span> <span class="hljs-keyword">for</span>(<span class="hljs-keyword">int</span> i = <span class="hljs-number">0</span>;i<<span class="hljs-number">10</span>;i++) {<br><span class="linenum hljs-number">14</span> System.out.println(<span class="hljs-string">"线程myt执行--->"</span>+i);<br><span class="linenum hljs-number">15</span> }<br><span class="linenum hljs-number">16</span> }<br><span class="linenum hljs-number">17</span><br><span class="linenum hljs-number">18</span>}<br><span class="linenum hljs-number">19</span><br><span class="linenum hljs-number">20</span><span class="hljs-comment">//2</span><br><span class="linenum hljs-number">21</span><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Test03</span> </span>{<br><span class="linenum hljs-number">22</span> <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{<br><span class="linenum hljs-number">23</span><br><span class="linenum hljs-number">24</span> <span class="hljs-comment">//创建实现类对象</span><br><span class="linenum hljs-number">25</span> MyRun r = <span class="hljs-keyword">new</span> MyRun();<br><span class="linenum hljs-number">26</span> <span class="hljs-comment">// 创建一个线程对象</span><br><span class="linenum hljs-number">27</span> Thread t = <span class="hljs-keyword">new</span> Thread(r);<span class="hljs-comment">// 在Thread 类中有一个Runnable的属性,给该属性赋值 </span><br><span class="linenum hljs-number">28</span> <span class="hljs-comment">// 启动线程</span><br><span class="linenum hljs-number">29</span> t.start();<span class="hljs-comment">// run</span><br><span class="linenum hljs-number">30</span> }<br><span class="linenum hljs-number">31</span>}<br><span class="linenum hljs-number">32</span><br><span class="linenum hljs-number">33</span><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MyRun</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">Runnable</span></span>{<br><span class="linenum hljs-number">34</span><br><span class="linenum hljs-number">35</span> <span class="hljs-meta">@Override</span><br><span class="linenum hljs-number">36</span> <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">run</span><span class="hljs-params">()</span> </span>{<br><span class="linenum hljs-number">37</span> <span class="hljs-keyword">for</span>(<span class="hljs-keyword">int</span> i = <span class="hljs-number">0</span>;i<<span class="hljs-number">10</span>;i++) {<br><span class="linenum hljs-number">38</span> System.out.println(<span class="hljs-string">"myrun 执行---->"</span>+i);<br><span class="linenum hljs-number">39</span> }<br><span class="linenum hljs-number">40</span> }<br><span class="linenum hljs-number">41</span><br><span class="linenum hljs-number">42</span>}<br></code></pre>
<h3 id="h-4"><span>常见方法</span></h3>
<pre><code class="java language-java hljs"><span class="linenum hljs-number"> 1</span><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Test04</span> </span>{<br><span class="linenum hljs-number"> 2</span> <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{<br><span class="linenum hljs-number"> 3</span> <span class="hljs-comment">//线程的常见方法</span><br><span class="linenum hljs-number"> 4</span> <span class="hljs-comment">//1:获取当前线程</span><br><span class="linenum hljs-number"> 5</span> Thread currentThread = Thread.currentThread();<span class="hljs-comment">//获取当前正在执行的线程</span><br><span class="linenum hljs-number"> 6</span> System.out.println(currentThread.getId()+<span class="hljs-string">"=="</span>+currentThread.getName());<br><span class="linenum hljs-number"> 7</span> <span class="hljs-comment">//2:创建线程对象 启动</span><br><span class="linenum hljs-number"> 8</span> MyR my = <span class="hljs-keyword">new</span> MyR(<span class="hljs-string">"线程A"</span>);<br><span class="linenum hljs-number"> 9</span> my.setDaemon(<span class="hljs-keyword">true</span>);<br><span class="linenum hljs-number">10</span> my.start();<br><span class="linenum hljs-number">11</span> <span class="hljs-comment">//3:获取线程的优先级别</span><br><span class="linenum hljs-number">12</span> System.out.println(Thread.MAX_PRIORITY);<br><span class="linenum hljs-number">13</span> System.out.println(Thread.NORM_PRIORITY);<br><span class="linenum hljs-number">14</span> System.out.println(Thread.MIN_PRIORITY);<br><span class="linenum hljs-number">15</span> <span class="hljs-comment">//4:获取当前线程的优先级别</span><br><span class="linenum hljs-number">16</span> System.out.println(<span class="hljs-string">"主线程的有限级别:"</span>+currentThread.getPriority());<br><span class="linenum hljs-number">17</span> <span class="hljs-comment">//5:设置线程的优先级别</span><br><span class="linenum hljs-number">18</span> currentThread.setPriority(<span class="hljs-number">7</span>);<br><span class="linenum hljs-number">19</span> System.out.println(<span class="hljs-string">"主线程的有限级别:"</span>+currentThread.getPriority());<br><span class="linenum hljs-number">20</span> <span class="hljs-comment">//是否存活</span><br><span class="linenum hljs-number">21</span> System.out.println(my.isAlive());<br><span class="linenum hljs-number">22</span> <span class="hljs-comment">//是否是守护线程</span><br><span class="linenum hljs-number">23</span> System.out.println(my.isDaemon());<br><span class="linenum hljs-number">24</span> }<br><span class="linenum hljs-number">25</span>}<br><span class="linenum hljs-number">26</span><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MyR</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Thread</span></span>{<br><span class="linenum hljs-number">27</span><br><span class="linenum hljs-number">28</span> <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-title">MyR</span><span class="hljs-params">(String name)</span> </span>{<br><span class="linenum hljs-number">29</span> <span class="hljs-keyword">super</span>(name);<br><span class="linenum hljs-number">30</span> }<br><span class="linenum hljs-number">31</span> <span class="hljs-meta">@Override</span><br><span class="linenum hljs-number">32</span> <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">run</span><span class="hljs-params">()</span> </span>{<br><span class="linenum hljs-number">33</span> System.out.println(<span class="hljs-keyword">this</span>.getName());<br><span class="linenum hljs-number">34</span> }<br><span class="linenum hljs-number">35</span><br><span class="linenum hljs-number">36</span>}<br></code></pre>
<h3 id="h-5"><span>生命周期</span></h3>
<figure><img src="https://i.loli.net/2019/08/02/5d430d2a5a7be52631.png" alt="" title=""><figcaption></figcaption></figure>
<h3 id="h-6"><span>代理模式</span></h3>
<p>静态代理模式和动态代理模式</p>
<table>
<thead>
<tr>
<th>静态代理模式</th>
</tr>
</thead>
<tbody>
<tr>
<td>这种模式可以实现帮助被代理者完成一些前期的准备工作和后期的善后工作,但是核心的业务逻辑仍然是由被代理者完成。(1)接口:主题 (2)代理类 (3)被代理类 实现方式:代理类和被代理类要实现同一个主题接口,而且代理类中要有一个被代理类的属性(target),这样才能把核心业务逻辑交还给被代理类完成;而一些与核心业务逻辑无关的逻辑,并且需求是多变的,那么这些逻辑就可以交给代理类来完成。</td>
</tr>
</tbody>
</table>
<h2 id="h-7"><span>注解</span></h2>
<p>注解本身是一种标记,科学的叫法叫做“元数据”;<br>本身并不会对代码的运行产生任何影响,如果只使用注解本身,甚至和注释没有区别。</p>
<p>只有与反射合作,才能发挥出注解(运行期)的作用。 该注解信息是源码、编译期、运行期都存在的。</p>
<p>| 分类 |<br>| ------------------------------------------------------------ |<br>| 元注解: 用来注解 注解的注解 <br> @Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})<br> @Retention(RetentionPolicy.SOURCE)<br> @Target 用来声明当前注解能够定义在哪里<br> @Retention 用来声明当前注解的生命周期<br> SOURCE 源码 CLASS 字节码 编译之后 RUNTIME 运行期 (一般使用) |<br>| 内置注解: jdk中已经存在的一些注解<br> @Override 该注解只能应用在方法上面 用来判定当前方法是否是重写方法<br> @SuppressWarnings("all") 抑制警告 "" 编写抑制何种警告。 注解中可以存在值<br> @Deprecated 标示当前方法已经过时 |<br>| 自定义注解: @interface |</p>
<pre><code class="java language-java hljs"><span class="linenum hljs-number">1</span><span class="hljs-meta">@Target</span>(ElementType.FIELD)<br><span class="linenum hljs-number">2</span><span class="hljs-meta">@Retention</span>(RetentionPolicy.RUNTIME)<br><span class="linenum hljs-number">3</span><span class="hljs-keyword">public</span> <span class="hljs-meta">@interface</span> Column {<br><span class="linenum hljs-number">4</span><br><span class="linenum hljs-number">5</span> <span class="hljs-function">String <span class="hljs-title">columnName</span><span class="hljs-params">()</span></span>;<br><span class="linenum hljs-number">6</span> <span class="hljs-function">String <span class="hljs-title">columnType</span><span class="hljs-params">()</span></span>;<br><span class="linenum hljs-number">7</span>}<br></code></pre></div></div></body>
</html>