-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathArrayList.html
227 lines (217 loc) · 39 KB
/
ArrayList.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
<!DOCTYPE html><html style="display:none" lang="zh"><head><meta charset="utf-8"><script>window.materialVersion="1.5.6",window.oldVersion=["codestartv1","1.3.4","1.4.0","1.4.0b1","1.5.0","1.5.2","1.5.5"]</script><meta http-equiv="x-dns-prefetch-control" content="on"><link rel="dns-prefetch" href="https://cdn1.lncld.net"><link rel="dns-prefetch" href="https://busuanzi.ibruce.info"><link rel="dns-prefetch" href="https://cdn1.lncld.net"><link rel="dns-prefetch" href="https://cdn.jsdelivr.net"><link rel="dns-prefetch" href="https://hm.baidu.com"><link rel="dns-prefetch" href="https://www.google-analytics.com"><link rel="dns-prefetch" href="https://fonts.googleapis.com"><meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"><meta name="renderer" content="webkit"><meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no"><title>ArrayList | FREELEE'S WORLD</title><link rel="icon shortcut" type="image/ico" href="/img/favicon.png"><link rel="icon" href="/img/favicon.png"><meta name="format-detection" content="telephone=no"><meta name="description" itemprop="description" content="Do not follow crowd,be yourself"><meta name="keywords" content=",array,Java容器,List"><meta name="theme-color" content="#0097A7"><meta http-equiv="Cache-Control" content="no-transform"><meta http-equiv="Cache-Control" content="no-siteapp"><!--[if lte IE 9]>
<link rel="stylesheet" href="/css/ie-blocker.css">
<script src="/js/ie-blocker.zhCN.js"></script>
<![endif]--><script>window.lsloader={jsRunSequence:[],jsnamemap:{},cssnamemap:{}},lsloader.removeLS=function(e){try{localStorage.removeItem(e)}catch(e){}},lsloader.setLS=function(e,t){try{localStorage.setItem(e,t)}catch(e){}},lsloader.getLS=function(e){var t="";try{t=localStorage.getItem(e)}catch(e){t=""}return t},versionString="/*"+(window.materialVersion||"unknownVersion")+"*/",lsloader.clean=function(){try{for(var e=[],t=0;t<localStorage.length;t++)e.push(localStorage.key(t));e.forEach(function(e){var n=lsloader.getLS(e);window.oldVersion&&window.oldVersion.reduce(function(e,t){return e||-1!==n.indexOf("/*"+t+"*/")},!1)&&lsloader.removeLS(e)})}catch(e){}},lsloader.clean(),lsloader.load=function(e,t,n,s){var a;if("boolean"==typeof n&&(s=n,n=void 0),s=s||!1,n=n||function(){},(a=this.getLS(e))&&-1===a.indexOf(versionString))return this.removeLS(e),void this.requestResource(e,t,n,s);if(a){if(a.split(versionString)[0]!=t)return console.log("reload:"+t),this.removeLS(e),void this.requestResource(e,t,n,s);a=a.split(versionString)[1],s?(this.jsRunSequence.push({name:e,code:a}),this.runjs(t,e,a)):(document.getElementById(e).appendChild(document.createTextNode(a)),n())}else this.requestResource(e,t,n,s)},lsloader.requestResource=function(t,n,e,s){var a=this;s?this.iojs(n,t,function(e,t,n){a.setLS(t,e+versionString+n),a.runjs(e,t,n)}):this.iocss(n,t,function(e){document.getElementById(t).appendChild(document.createTextNode(e)),a.setLS(t,n+versionString+e)},e)},lsloader.iojs=function(e,t,n){var s=this;s.jsRunSequence.push({name:t,code:""});try{var a=new XMLHttpRequest;a.open("get",e,!0),a.onreadystatechange=function(){if(4==a.readyState){if((200<=a.status&&a.status<300||304==a.status)&&""!=a.response)return void n(e,t,a.response);s.jsfallback(e,t)}},a.send(null)}catch(n){s.jsfallback(e,t)}},lsloader.iocss=function(e,t,n,s){var a=this;try{var o=new XMLHttpRequest;o.open("get",e,!0),o.onreadystatechange=function(){if(4==o.readyState){if((200<=o.status&&o.status<300||304==o.status)&&""!=o.response)return n(o.response),void s();a.cssfallback(e,t,s)}},o.send(null)}catch(n){a.cssfallback(e,t,s)}},lsloader.iofonts=function(e,t,n,s){var a=this;try{var o=new XMLHttpRequest;o.open("get",e,!0),o.onreadystatechange=function(){if(4==o.readyState){if((200<=o.status&&o.status<300||304==o.status)&&""!=o.response)return n(o.response),void s();a.cssfallback(e,t,s)}},o.send(null)}catch(n){a.cssfallback(e,t,s)}},lsloader.runjs=function(e,t,n){if(t&&n)for(var s in this.jsRunSequence)this.jsRunSequence[s].name==t&&(this.jsRunSequence[s].code=n);if(this.jsRunSequence[0]&&this.jsRunSequence[0].code&&"failed"!=this.jsRunSequence[0].status)(a=document.createElement("script")).appendChild(document.createTextNode(this.jsRunSequence[0].code)),a.type="text/javascript",document.getElementsByTagName("head")[0].appendChild(a),this.jsRunSequence.shift(),0<this.jsRunSequence.length&&this.runjs();else if(this.jsRunSequence[0]&&"failed"==this.jsRunSequence[0].status){var a,o=this;(a=document.createElement("script")).src=this.jsRunSequence[0].path,a.type="text/javascript",this.jsRunSequence[0].status="loading",a.onload=function(){o.jsRunSequence.shift(),0<o.jsRunSequence.length&&o.runjs()},document.body.appendChild(a)}},lsloader.tagLoad=function(e,t){this.jsRunSequence.push({name:t,code:"",path:e,status:"failed"}),this.runjs()},lsloader.jsfallback=function(e,t){if(!this.jsnamemap[t]){for(var n in this.jsnamemap[t]=t,this.jsRunSequence)this.jsRunSequence[n].name==t&&(this.jsRunSequence[n].code="",this.jsRunSequence[n].status="failed",this.jsRunSequence[n].path=e);this.runjs()}},lsloader.cssfallback=function(e,t,n){if(!this.cssnamemap[t]){this.cssnamemap[t]=1;var s=document.createElement("link");s.type="text/css",s.href=e,s.rel="stylesheet",s.onload=s.onerror=n;var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(s,a)}},lsloader.runInlineScript=function(e,t){var n=document.getElementById(t).innerText;this.jsRunSequence.push({name:e,code:n}),this.runjs()}</script><script>function Queue(){this.dataStore=[],this.offer=function(e){this.debug&&console.log("Offered a Queued Function."),"function"==typeof e?this.dataStore.push(e):console.log("You must offer a function.")},this.poll=function(){return this.debug&&console.log("Polled a Queued Function."),this.dataStore.shift()},this.execNext=function(){var e=this.poll();void 0!==e&&(this.debug&&console.log("Run a Queued Function."),e())},this.debug=!1,this.startDebug=function(){this.debug=!0}}var queue=new Queue</script><style id="material_css"></style><script>void 0===window.lsLoadCSSMaxNums&&(window.lsLoadCSSMaxNums=0),window.lsLoadCSSMaxNums++,lsloader.load("material_css","/css/material.min.css?Z7a72R1E4SxzBKR/WGctOA==",function(){void 0===window.lsLoadCSSNums&&(window.lsLoadCSSNums=0),window.lsLoadCSSNums++,window.lsLoadCSSNums==window.lsLoadCSSMaxNums&&(document.documentElement.style.display="")},!1)</script><style id="style_css"></style><script>void 0===window.lsLoadCSSMaxNums&&(window.lsLoadCSSMaxNums=0),window.lsLoadCSSMaxNums++,lsloader.load("style_css","/css/style.min.css?+OjjCoCNzDrL+iVLHXDqbg==",function(){void 0===window.lsLoadCSSNums&&(window.lsLoadCSSNums=0),window.lsLoadCSSNums++,window.lsLoadCSSNums==window.lsLoadCSSMaxNums&&(document.documentElement.style.display="")},!1)</script><style>body,html{font-family:Roboto,"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;overflow-x:hidden!important}code{font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace}a{color:#00838f}#scheme-Paradox .hot_tags-count,#scheme-Paradox .sidebar-colored .sidebar-badge,#scheme-Paradox .sidebar-colored .sidebar-header,#scheme-Paradox .sidebar_archives-count,#search-form-label:after,#search-label,.mdl-card__media{background-color:#0097a7!important}#scheme-Paradox .sidebar-colored .sidebar-nav>.dropdown>.dropdown-menu>li>a:focus,#scheme-Paradox .sidebar-colored .sidebar-nav>.dropdown>.dropdown-menu>li>a:hover{color:#0097a7!important}#ds-reset #ds-ctx .ds-ctx-entry .ds-ctx-head a,#post_entry-right-info,.sidebar-colored .sidebar-nav li:hover>a,.sidebar-colored .sidebar-nav li:hover>a i,.sidebar-colored .sidebar-nav li>a:focus i,.sidebar-colored .sidebar-nav li>a:hover,.sidebar-colored .sidebar-nav li>a:hover i,.sidebar-colored .sidebar-nav>.open>a,.sidebar-colored .sidebar-nav>.open>a:focus,.sidebar-colored .sidebar-nav>.open>a:hover{color:#0097a7!important}.toTop{background:#757575!important}.material-layout .material-index>.material-nav,.material-layout .material-post>.material-nav,.material-nav a{color:#757575}#scheme-Paradox .MD-burger-layer{background-color:#757575}#scheme-Paradox #post-toc-trigger-btn{color:#757575}.post-toc a:hover{color:#00838f;text-decoration:underline}</style><style>body{background-image:url(/img/background.jpg)}</style><style>.fade{transition:all .8s linear;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}.fade.out{opacity:0}</style><link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500" rel="stylesheet"><style id="material_icons"></style><script>void 0===window.lsLoadCSSMaxNums&&(window.lsLoadCSSMaxNums=0),window.lsLoadCSSMaxNums++,lsloader.load("material_icons","/css/material-icons.css?pqhB/Rd/ab0H2+kZp0RDmw==",function(){void 0===window.lsLoadCSSNums&&(window.lsLoadCSSNums=0),window.lsLoadCSSNums++,window.lsLoadCSSNums==window.lsLoadCSSMaxNums&&(document.documentElement.style.display="")},!1)</script><script>lsloader.load("jq_js","/js/jquery.min.js?ezyEvm8ST5CGfpA+kFFi1g==",!0)</script><meta name="mobile-web-app-capable" content="yes"><meta name="application-name" content="FREELEE'S WORLD"><meta name="msapplication-starturl" content="https://freelee.me/ArrayList.html"><meta name="msapplication-navbutton-color" content="#0097A7"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-title" content="FREELEE'S WORLD"><meta name="apple-mobile-web-app-status-bar-style" content="black"><link rel="apple-touch-icon" href="/img/favicon.png"><meta property="og:url" content="https://freelee.me/ArrayList.html"><meta property="og:type" content="blog"><meta property="og:title" content="ArrayList | FREELEE'S WORLD"><meta property="og:image" content="/img/favicon.png"><meta property="og:description" content="Do not follow crowd,be yourself"><meta property="og:article:tag" content="array"><meta property="og:article:tag" content="Java容器"><meta property="og:article:tag" content="List"><meta property="article:published_time" content="Sat May 26 2018 12:00:00 GMT+0800"><meta property="article:modified_time" content="Sun Apr 07 2019 20:32:14 GMT+0800"><meta name="twitter:card" content="summary_large_image"><link rel="canonical" href="https://freelee.me/ArrayList.html"><script type="application/ld+json">{
"@context": "https://schema.org",
"@type": "BlogPosting",
"mainEntityOfPage": "https://freelee.me/ArrayList.html",
"headline": "ArrayList",
"datePublished": "Sat May 26 2018 12:00:00 GMT+0800",
"dateModified": "Sun Apr 07 2019 20:32:14 GMT+0800",
"author": {
"@type": "Person",
"name": "freelee",
"image": {
"@type": "ImageObject",
"url": "/img/avatar.jpg"
},
"description": "Hi, nice to meet you"
},
"publisher": {
"@type": "Organization",
"name": "FREELEE'S WORLD",
"logo": {
"@type":"ImageObject",
"url": "/img/favicon.png"
}
},
"keywords": ",array,Java容器,List",
"description": "Do not follow crowd,be yourself",
}</script><script>!function(e,a,t,n,g,c,o){e.GoogleAnalyticsObject="ga",e.ga=e.ga||function(){(e.ga.q=e.ga.q||[]).push(arguments)},e.ga.l=1*new Date,c=a.createElement(t),o=a.getElementsByTagName(t)[0],c.async=1,c.src="https://www.google-analytics.com/analytics.js",o.parentNode.insertBefore(c,o)}(window,document,"script"),ga("create","UA-119398709-1","auto"),ga("send","pageview")</script><script>var _hmt=_hmt||[];!function(){var e=document.createElement("script");e.src="https://hm.baidu.com/hm.js?245dd8ff6072762e8a638a21ea0d7715";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)}()</script><style id="fancybox_css"></style><script>void 0===window.lsLoadCSSMaxNums&&(window.lsLoadCSSMaxNums=0),window.lsLoadCSSMaxNums++,lsloader.load("fancybox_css","/css/jquery.fancybox.min.css?otQlhCkvZMWCfotnsbOHJg==",function(){void 0===window.lsLoadCSSNums&&(window.lsLoadCSSNums=0),window.lsLoadCSSNums++,window.lsLoadCSSNums==window.lsLoadCSSMaxNums&&(document.documentElement.style.display="")},!1)</script><script>lsloader.load("fancybox_js","/js/jquery.fancybox.min.js?Saa00BmpNLz4Pww5frqC2A==",!0)</script><script>lsloader.load("utils_js","/js/utils.js?d7mhWUff0fpWwo4D37DCrg==",!0)</script><link rel="stylesheet" href="/css/prism-atom-dark.css" type="text/css"></head><body id="scheme-Paradox" class="lazy"><div class="material-layout mdl-js-layout has-drawer is-upgraded"><main class="material-layout__content" id="main"><div id="top"></div><button class="MD-burger-icon sidebar-toggle"><span id="MD-burger-id" class="MD-burger-layer"></span></button> <button id="post-toc-trigger-btn" class="mdl-button mdl-js-button mdl-button--icon"><i class="material-icons">format_list_numbered</i></button><ul class="post-toc-wrap mdl-menu mdl-menu--bottom-left mdl-js-menu mdl-js-ripple-effect" for="post-toc-trigger-btn" style="max-height:80vh;overflow-y:scroll"><ol class="post-toc"><li class="post-toc-item post-toc-level-3"><a class="post-toc-link" href="#ArrayList的初始化"><span class="post-toc-number">1.</span> <span class="post-toc-text">ArrayList的初始化</span></a></li><li class="post-toc-item post-toc-level-3"><a class="post-toc-link" href="#ArrayList-常用方法"><span class="post-toc-number">2.</span> <span class="post-toc-text">ArrayList 常用方法</span></a><ol class="post-toc-child"><li class="post-toc-item post-toc-level-5"><a class="post-toc-link" href="#1、add"><span class="post-toc-number">2.0.1.</span> <span class="post-toc-text">1、add()</span></a></li><li class="post-toc-item post-toc-level-5"><a class="post-toc-link" href="#2、remove"><span class="post-toc-number">2.0.2.</span> <span class="post-toc-text">2、remove()</span></a></li></ol></li></ol><li class="post-toc-item post-toc-level-3"><a class="post-toc-link" href="#ArrayList与Array"><span class="post-toc-number">3.</span> <span class="post-toc-text">ArrayList与Array</span></a></li></ul><div class="material-post_container"><div class="material-post mdl-grid"><div class="mdl-card mdl-shadow--4dp mdl-cell mdl-cell--12-col"><div class="post_thumbnail-random mdl-card__media mdl-color-text--grey-50"><script type="text/ls-javascript" id="post-thumbnail-script">var randomNum = Math.floor(Math.random() * 34 + 1);
$('.post_thumbnail-random').attr('data-original', '/img/random/material-' + randomNum + '.png');
$('.post_thumbnail-random').addClass('lazy');</script><p class="article-headline-p">ArrayList</p></div><div class="mdl-color-text--grey-700 mdl-card__supporting-text meta"><div id="author-avatar"><img src="/img/avatar.jpg" width="44px" height="44px" alt="Author Avatar"></div><div><strong>freelee</strong> <span>创建于5月 26, 2018</span> <span>更新于4月 07, 2019</span></div><div class="section-spacer"></div><button id="article-functions-viewtags-button" class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon"><i class="material-icons" role="presentation">bookmark</i> <span class="visuallyhidden">bookmark</span></button><ul class="mdl-menu mdl-menu--bottom-right mdl-js-menu mdl-js-ripple-effect" for="article-functions-viewtags-button"><li class="mdl-menu__item"><a class="post_tag-link" href="/tags/Java容器/">Java容器</a></li><li class="mdl-menu__item"><a class="post_tag-link" href="/tags/List/">List</a></li><li class="mdl-menu__item"><a class="post_tag-link" href="/tags/array/">array</a></li></ul><button id="article-fuctions-share-button" class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon"><i class="material-icons" role="presentation">share</i> <span class="visuallyhidden">share</span></button><ul class="mdl-menu mdl-menu--bottom-right mdl-js-menu mdl-js-ripple-effect" for="article-fuctions-share-button"><a class="post_share-link" href="#"><li class="mdl-menu__item"><span id="/ArrayList.html" class="leancloud-views_num" data-flag-title="ArrayList"> 浏览量</span></li></a><a class="post_share-link" href="http://service.weibo.com/share/share.php?appkey=&title=ArrayList&url=https://freelee.me/ArrayList.html&pic=https://freelee.me/img/favicon.png&searchPic=false&style=simple" target="_blank"><li class="mdl-menu__item">分享到微博</li></a><a class="post_share-link" href="http://connect.qq.com/widget/shareqq/index.html?site=FREELEE'S WORLD&title=ArrayList&summary=Do not follow crowd,be yourself&pics=https://freelee.me/img/favicon.png&url=https://freelee.me/ArrayList.html" target="_blank"><li class="mdl-menu__item">分享到 QQ</li></a></ul></div><head><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css"><script src="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js"></script><script src="https://cdn.jsdelivr.net/npm/meting@2/dist/Meting.min.js"></script><script src="https://unpkg.com/[email protected]"></script><link rel="stylesheet" href="/css/prism-atom-dark.css" type="text/css"></head><div id="post-content" class="mdl-color-text--grey-700 mdl-card__supporting-text fade out"><p>今天写Java集合框架里的其中一种容器——ArrarList。听上去跟数组差不多,其实,它们很多理念上是真差不多。先放一张集合框架图。<br><img src="https://f002.backblazeb2.com/file/freelee/Java/Collections/ArrayList/20180402190247303.png" alt="这里写图片描述"><br>乍一看,感觉贼复杂,头要炸。其实只要小小分析一波,就不会觉得难了。要不,我再放一张简化图?!<br><img src="https://f002.backblazeb2.com/file/freelee/Java/Collections/ArrayList/20180402190417789.png" alt="这里写图片描述"><br>简化图里把重点都给留下了。从上面那张框架图中可以看出ArrayList是一个实现类,继承了AbstarctList抽象类,实现了List接口,我们可以从源码中看到这些,除了这些,ArrayList还实现了RandomAccess,Cloneable,Serializable这三个接口。<br>简单介绍一下这三个接口(等学深了,再来给详细的)。</p><ul><li><p>RandomAccess<br>翻译一下,就是随机访问,这就像数组那样可以通过下标直接访问那个元素。</p></li><li><p>Cloneable<br>克隆接口,其可以将一个实例拷贝到一个新实例。实际上只拷贝其中的各变量的值,是浅拷贝。</p></li><li><p>Serializable<br>可序列化接口,通过此接口可以实现实例的存储,使用时可以通过反序列化得到那个实例。</p></li></ul><p>ArrayList的本质就是一个Object对象类型的数组,在这个数组上进行一系列操作,因为Object是所有类的基类,所以可以接收任意同类型的对象。并且用到了泛型,可以自己指定对象的类型。</p><h3 id="ArrayList的初始化"><a href="#ArrayList的初始化" class="headerlink" title="ArrayList的初始化"></a>ArrayList的初始化</h3><p>1、<strong>静态初始化</strong>(在声明变量时,赋予初始值。)</p><pre><code>//第一种
public static void main(String[] args) {
ArrayList<String> arraylist=new ArrayList<String>(){
{
add("a");
add("b");
}
};
}
//第二种
public static void main(String[] args) {
ArrayList<String> arraylist=new ArrayList<String>(Arrays.asList("a","b"));
System.out.print(arraylist);
}
//第三种
public static void main(String[] args) {
String[] str={"a","b"};
List arraylist=Arrays.asList(str);
}
</code></pre><p>要注意的是,第三种的arraylist是无法改变其长度的,即无法进行add(),remove()等操作,因为数组一旦给定,长度就无法改变,初始化时将数组泛型化赋给它。<br>2、<strong>动态初始化</strong></p><pre><code>public static void main(String[] args) {
ArrayList<String> arraylist=new ArrayList<String>();
arraylist.add("a");
arraylist.add("b");
System.out.println(arraylist);
}
</code></pre><h3 id="ArrayList-常用方法"><a href="#ArrayList-常用方法" class="headerlink" title="ArrayList 常用方法"></a>ArrayList 常用方法</h3><p>讲完了初始化,来看一下ArrayList的一些常用方法。</p><h5 id="1、add"><a href="#1、add" class="headerlink" title="1、add()"></a>1、add()</h5><p>我们先来看看add()方法的源码</p><pre><code> public boolean add(E e) {
modCount++;
add(e, elementData, size);
return true;
}
</code></pre><p>可以看到这里的add()又调用了与它互为重载的方法,如下。</p><pre><code> /**
* This helper method split out from add(E) to keep method
* bytecode size under 35 (the -XX:MaxInlineSize default value),
* which helps when add(E) is called in a C1-compiled loop.
*/
private void add(E e, Object[] elementData, int s) {
if (s == elementData.length)
elementData = grow();
elementData[s] = e;
size = s + 1;
}
</code></pre><p>可以看到如果当前数组的长度等于当前设定的size就会调用grow()方法。size不用多讲,就是ArrayList包含的元素个数,来看一下elementData和grow()的定义。</p><blockquote><p>先看elementDate,其本质是一个对象数组。如果创建一个空的ArrayList时,系统会将其capacity置 为10,也就是默认的大小为10。</p><pre><code> transient Object[] elementData; // non-private to simplify nested class access
</code></pre><p>然后在看grow()。它也去调用了与它重载的方法,可以看到它将size+1值传给重载函数,带参函数将其扩展成当前数组大小的两倍。</p><pre><code>private Object[] grow(int minCapacity) {
return elementData = Arrays.copyOf(elementData,
newCapacity(minCapacity));
}
private Object[] grow() {
return grow(size + 1);
}
</code></pre></blockquote><p>再回到add(),如果数组长度与当前数组容量相同,则先扩增一倍大小,然后赋值。<br>还没讲完呢,add()还有另外一个重载方法(我的天哪,一个add()的源码比我想象的要多)。</p><pre><code> public void add(int index, E element) {
rangeCheckForAdd(index);
modCount++;
final int s;
Object[] elementData;
if ((s = size) == (elementData = this.elementData).length)
elementData = grow();
System.arraycopy(elementData, index,
elementData, index + 1,
s - index);
elementData[index] = element;
size = s + 1;
}
</code></pre><p>这个add()方法接受外部两个参数,index就是要添加的位置的下标。首先rangeCheckForAdd(),是判断index是否合法的(大于等于0&&小于等于size,注意add时,不能跨长度给它赋值),modCount是记录此数组修改的次数,(这里又可以展开很多知识,我直接抛一个链接<a href="https://www.cnblogs.com/zuochengsi-9/p/7050351.html),其主要就是防止线程安全的ArrayList一边用iterator遍历时一边对ArrayList进行增删操作时发生异常。然后是arraycopy(),查看源码时发现它是native(C++真厉害),那就看声明,其意思就是将从src里的srcPos位置开始的length长度赋给从destPos位置的dest。" target="_blank" rel="noopener">https://www.cnblogs.com/zuochengsi-9/p/7050351.html),其主要就是防止线程安全的ArrayList一边用iterator遍历时一边对ArrayList进行增删操作时发生异常。然后是arraycopy(),查看源码时发现它是native(C++真厉害),那就看声明,其意思就是将从src里的srcPos位置开始的length长度赋给从destPos位置的dest。</a></p><pre><code>public static native void arraycopy(Object src, int srcPos, Object dest,int destPos,int length);
</code></pre><p>再来看看具体使用。</p><pre><code> ArrayList <String>arraylist = new ArrayList<String>();
arraylist.add("b");
arraylist.add(0,"a");
arraylist.add(2,"c")
//下标为3的地方还为null
//arraylist.add(4,"d"); //error
System.out.println(arraylist);
Output:
[a, b, c]
</code></pre><p>这里a和b的位置是因为arraycopy。</p><h5 id="2、remove"><a href="#2、remove" class="headerlink" title="2、remove()"></a>2、remove()</h5><p>remove()也有两个重载方法。就不贴源码了,源码哪都可以查到。</p><pre><code>//按照下标来移除
public E remove(int index);
//按照元素来移除
public boolean remove(Object o);
//clear()方法是删除所有元素
public void clear()
//删除指定下标范围的元素
protected void removeRange(int fromIndex, int toIndex)
</code></pre><p>如果使用remove删除某个下标是ArrayList的中间一个元素,那么ArrayList会将所删元素后面的元素前移一个位置。</p><h3 id="ArrayList与Array"><a href="#ArrayList与Array" class="headerlink" title="ArrayList与Array"></a>ArrayList与Array</h3><p>那不是有数组就可以了吗?为什么还要ArrayList呢?<br>| | ArrayList | Array |<br>| ——– | :—–: | :—-: |<br>| 可扩展性 | 可以动态改变其长度 | 数组是静态的,一旦长度给定,就无法改变 |<br>| 方法支持 | 有很多的方法可以方便的对ArrayList进行操,但是牺牲了效率(判定数组是否outBounds…) | 数组没有 |<br>总之,各有各的优点,选用哪种也是视具体情况而定的,并无绝对的说法。</p><p><code>`</code></p></div><script language="javascript">function siteTime(){window.setTimeout("siteTime()",1e3);var e=36e5,t=24*e,o=new Date,i=o.getFullYear(),a=o.getMonth()+1,n=o.getDate(),r=o.getHours(),M=o.getMinutes(),l=o.getSeconds(),s=Date.UTC(2019,4,6,22,30,0),g=Date.UTC(i,a,n,r,M,l)-s,m=Math.floor(g/31536e6),u=Math.floor(g/t-365*m),T=Math.floor((g-(365*m+u)*t)/e),f=Math.floor((g-(365*m+u)*t-T*e)/6e4),h=Math.floor((g-(365*m+u)*t-T*e-6e4*f)/1e3);document.getElementById("sitetime").innerHTML=" "+m+" Year "+u+" Day "+T+" Hour "+f+" Min "+h+" Sec"}siteTime()</script><style>.rt{float:right;font-family:Orange LET}</style><div id="comment" style="padding:10px" class="vcomment"></div><script src="//cdn1.lncld.net/static/js/3.0.4/av-min.js"></script><script src="//unpkg.com/valine/dist/Valine.min.js"></script><script>var GUEST_INFO=["nick","mail","link"],guest_info="nick,mail,link".split(",").filter(function(i){return-1<GUEST_INFO.indexOf(i)}),notify=!1,verify=!1;new Valine({el:".vcomment",notify:notify,verify:verify,appId:"cYvosdEKp3U6Ywdx1QYkG8XS-gzGzoHsz",appKey:"EDoI8TrQSx3pRT6QsLQrNEnP",placeholder:"bulugulu~~~(留下邮箱可以快速给你反馈哦)",pageSize:"10",avatar:"wavatar",lang:"zh-cn",guest_info:guest_info})</script></div><nav class="material-nav mdl-color-text--grey-50 mdl-cell mdl-cell--12-col"><a href="/springboot(一).html" id="post_nav-newer" class="prev-content"><button class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon mdl-color--white mdl-color-text--grey-900" role="presentation"><i class="material-icons">arrow_back</i></button> 新篇</a><div class="section-spacer"></div><a href="/NG.html" id="post_nav-older" class="next-content">旧篇 <button class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon mdl-color--white mdl-color-text--grey-900" role="presentation"><i class="material-icons">arrow_forward</i></button></a></nav></div></div><div class="sidebar-overlay"></div><aside id="sidebar" class="sidebar sidebar-colored sidebar-fixed-left" role="navigation"><div id="sidebar-main"><div class="sidebar-header header-cover" style="background-image:url(/img/sidebar_header.png)"><div class="top-bar"></div><button type="button" class="sidebar-toggle mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon" style="display:initial" data-upgraded=",MaterialButton,MaterialRipple"><i class="material-icons">clear_all</i> <span class="mdl-button__ripple-container"><span class="mdl-ripple"></span></span></button><div class="sidebar-image"><img src="/img/avatar.jpg" alt="freelee's avatar"></div><a data-toggle="dropdown" class="sidebar-brand" href="#settings-dropdown">[email protected] <b class="caret"></b></a></div><ul class="nav sidebar-nav"><li class="dropdown"><ul id="settings-dropdown" class="dropdown-menu"><li><a href="mailto:[email protected]" target="_blank" title="Email Me"><i class="material-icons sidebar-material-icons sidebar-indent-left1pc-element">email</i> Email Me</a></li></ul></li><li id="sidebar-first-li"><a href="/"><i class="material-icons sidebar-material-icons">home</i> 主页</a></li><li class="dropdown"><a href="#" class="ripple-effect dropdown-toggle" data-toggle="dropdown"><i class="material-icons sidebar-material-icons">inbox</i> 归档 <b class="caret"></b></a><ul class="dropdown-menu"><li><a class="sidebar_archives-link" href="/archives/2020/04/">四月 2020<span class="sidebar_archives-count">2</span></a></li><li><a class="sidebar_archives-link" href="/archives/2020/03/">三月 2020<span class="sidebar_archives-count">1</span></a></li><li><a class="sidebar_archives-link" href="/archives/2019/04/">四月 2019<span class="sidebar_archives-count">1</span></a></li><li><a class="sidebar_archives-link" href="/archives/2018/11/">十一月 2018<span class="sidebar_archives-count">1</span></a></li><li><a class="sidebar_archives-link" href="/archives/2018/10/">十月 2018<span class="sidebar_archives-count">7</span></a></li><li><a class="sidebar_archives-link" href="/archives/2018/09/">九月 2018<span class="sidebar_archives-count">2</span></a></li><li><a class="sidebar_archives-link" href="/archives/2018/05/">五月 2018<span class="sidebar_archives-count">6</span></a></li></ul></li><li class="dropdown"><a href="#" class="ripple-effect dropdown-toggle" data-toggle="dropdown"><i class="material-icons sidebar-material-icons">chrome_reader_mode</i> 分类 <b class="caret"></b></a><ul class="dropdown-menu"><li><a class="sidebar_archives-link" href="/categories/Docker/">Docker<span class="sidebar_archives-count">2</span></a></li><li><a class="sidebar_archives-link" href="/categories/Java/">Java<span class="sidebar_archives-count">1</span></a></li><li><a class="sidebar_archives-link" href="/categories/Linux/">Linux<span class="sidebar_archives-count">1</span></a></li><li><a class="sidebar_archives-link" href="/categories/ML/">ML<span class="sidebar_archives-count">2</span></a></li><li><a class="sidebar_archives-link" href="/categories/Machine-Learning/">Machine Learning<span class="sidebar_archives-count">2</span></a></li><li><a class="sidebar_archives-link" href="/categories/SpringBoot/">SpringBoot<span class="sidebar_archives-count">2</span></a></li><li><a class="sidebar_archives-link" href="/categories/SpringCloud/">SpringCloud<span class="sidebar_archives-count">3</span></a></li><li><a class="sidebar_archives-link" href="/categories/技术杂烩/">技术杂烩<span class="sidebar_archives-count">1</span></a></li><li><a class="sidebar_archives-link" href="/categories/生活/">生活<span class="sidebar_archives-count">3</span></a></li><li><a class="sidebar_archives-link" href="/categories/竞赛/">竞赛<span class="sidebar_archives-count">1</span></a></li><li><a class="sidebar_archives-link" href="/categories/计算机网络/">计算机网络<span class="sidebar_archives-count">2</span></a></li></ul></li><li><a href="/tags" title="标签"><i class="material-icons sidebar-material-icons">label</i> 标签</a></li><li><a href="/gallery" title="图库"><i class="material-icons sidebar-material-icons">images</i> 图库</a></li><li><a href="/timeline" title="Timeline"><i class="material-icons sidebar-material-icons">send</i> Timeline</a></li><li><a href="/about" title="AboutMe"><i class="material-icons sidebar-material-icons">mood</i> AboutMe</a></li><li><a href="/archives">文章总数 <span class="sidebar-badge">20</span></a></li></ul><div class="sidebar-divider"></div></div></aside><div id="back-to-top" class="toTop-wrap"><a href="#top" class="toTop"><i class="material-icons footer_top-i">expand_less</i></a></div><footer class="mdl-mini-footer" id="bottom"><div class="mdl-mini-footer--left-section sns-list"><a href="https://twitter.com/twitter" target="_blank"><button class="mdl-mini-footer--social-btn social-btn footer-sns-twitter"><span class="visuallyhidden">Twitter</span></button></a><a href="https://www.facebook.com/facebook" target="_blank"><button class="mdl-mini-footer--social-btn social-btn footer-sns-facebook"><span class="visuallyhidden">Facebook</span></button></a><a href="https://github.com/LJP-Perfect" target="_blank"><button class="mdl-mini-footer--social-btn social-btn footer-sns-github"><span class="visuallyhidden">Github</span></button></a></div><div id="copyright">Copyright © <span year></span> FREELEE'S WORLD</div><div class="mdl-mini-footer--right-section"><div><div class="footer-develop-div">Powered by <a href="https://hexo.io" target="_blank" class="footer-develop-a">Hexo</a></div><div class="footer-develop-div">Theme - <a href="https://github.com/viosey/hexo-theme-material" target="_blank" class="footer-develop-a">Material</a></div></div></div></footer><script>lsloader.load("lazyload_js","/js/lazyload.min.js?wgjW/HuQG9JDgvPDPoRAng==",!0)</script><script>lsloader.load("js_js","/js/js.min.js?LT4t6iE6m8TO1BLGGiNJqA==",!0)</script><script>lsloader.load("np_js","/js/nprogress.js?pl3Qhb9lvqR1FlyLUna1Yw==",!0)</script><script type="text/ls-javascript" id="NProgress-script">NProgress.configure({
showSpinner: true
});
NProgress.start();
$('#nprogress .bar').css({
'background': '#29d'
});
$('#nprogress .peg').css({
'box-shadow': '0 0 10px #29d, 0 0 15px #29d'
});
$('#nprogress .spinner-icon').css({
'border-top-color': '#29d',
'border-left-color': '#29d'
});
setTimeout(function() {
NProgress.done();
$('.fade').removeClass('out');
}, 800);</script><script src="https://cdn1.lncld.net/static/js/av-core-mini-0.6.1.js"></script><script>AV.initialize("cYvosdEKp3U6Ywdx1QYkG8XS-gzGzoHsz","EDoI8TrQSx3pRT6QsLQrNEnP")</script><script type="text/ls-javascript" id="leancloud-views-script">function showTime(Counter) {
var query = new AV.Query(Counter);
$('.leancloud-views_num').each(function() {
var url = $(this).attr('id').trim();
query.equalTo('url', url);
query.find({
success: function(results) {
if (results.length === 0) {
var content = '0 ' + $(document.getElementById(url)).text();
$(document.getElementById(url)).text(content);
return;
}
for (var i = 0; i < results.length; i++) {
var object = results[i];
var content = object.get('time') + ' ' + $(document.getElementById(url)).text();
$(document.getElementById(url)).text(content);
}
},
error: function(object, error) {
console.log('Error: ' + error.code + ' ' + error.message);
}
});
});
}
function addCount(Counter) {
var Counter = AV.Object.extend('Counter');
url = $('.leancloud-views_num').attr('id').trim();
title = $('.leancloud-views_num').attr('data-flag-title').trim();
var query = new AV.Query(Counter);
query.equalTo('url', url);
query.find({
success: function(results) {
if (results.length > 0) {
var counter = results[0];
counter.fetchWhenSave(true);
counter.increment('time');
counter.save(null, {
success: function(counter) {
var content = counter.get('time') + ' ' + $(document.getElementById(url)).text();
$(document.getElementById(url)).text(content);
},
error: function(counter, error) {
console.log('Failed to save Visitor num, with error message: ' + error.message);
}
});
} else {
var newcounter = new Counter();
newcounter.set('title', title);
newcounter.set('url', url);
newcounter.set('time', 1);
newcounter.save(null, {
success: function(newcounter) {
console.log('newcounter.get(\'time\')='+newcounter.get('time'));
var content = newcounter.get('time') + ' ' + $(document.getElementById(url)).text();
$(document.getElementById(url)).text(content);
},
error: function(newcounter, error) {
console.log('Failed to create');
}
});
}
},
error: function(error) {
console.log('Error:' + error.code + ' ' + error.message);
}
});
}
$(function() {
var Counter = AV.Object.extend('Counter');
if ($('.leancloud-views_num').length === 1) {
addCount(Counter);
} else if ($('.post-title-link').length > 1) {
showTime(Counter);
}
});</script><script src="https://dn-lbstatics.qbox.me/busuanzi/2.3/busuanzi.pure.mini.js"></script><script>var agent=navigator.userAgent.toLowerCase();0<agent.indexOf("ucbrowser")&&(document.write('<link rel="stylesheet" href="/css/uc.css">'),alert("由于 UC 浏览器使用极旧的内核,而本网站使用了一些新的特性。\n为了您能更好的浏览,推荐使用 Chrome 或 Firefox 浏览器。"))</script><script type="text/ls-javascript" id="window-load">$(window).on('load', function() {
// Post_Toc parent position fixed
$('.post-toc-wrap').parent('.mdl-menu__container').css('position', 'fixed');
});</script><script type="text/ls-javascript" id="lazy-load">// Offer LazyLoad
queue.offer(function(){
$('.lazy').lazyload({
effect : 'show'
});
});
// Start Queue
$(document).ready(function(){
setInterval(function(){
queue.execNext();
},200);
});</script><script>var copyrightNow=(new Date).getFullYear(),textContent=document.querySelector("span[year]");copyrightSince=2017,copyrightSince===copyrightNow||0===copyrightSince?textContent.textContent=copyrightNow:textContent.textContent=copyrightSince+" - "+copyrightNow,function(){for(var t=document.querySelectorAll('script[type="text/ls-javascript"]'),e=0;e<t.length;++e){var o=t[e];lsloader.runInlineScript(o.id,o.id)}}(),console.log("\n %c © Material Theme | Version: 1.5.6 | https://github.com/viosey/hexo-theme-material %c \n","color:#455a64;background:#e0e0e0;padding:5px 0;border-top-left-radius:5px;border-bottom-left-radius:5px;","color:#455a64;background:#e0e0e0;padding:5px 0;border-top-right-radius:5px;border-bottom-right-radius:5px;")</script></main></div><script src="/live2dw/lib/L2Dwidget.min.js?0c58a1486de42ac6cc1c59c7d98ae887"></script><script>L2Dwidget.init({"pluginRootPath":"live2dw/","pluginJsPath":"lib/","pluginModelPath":"assets/","model":{"jsonPath":"/live2dw/assets/koharu.model.json"},"display":{"position":"left","width":75,"height":150,"scaling":2,"horizontalOffset":10,"verticalOffset":-40},"mobile":{"show":false,"Scaling":0.5},"log":false,"tagMode":false});</script></body></html>