亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

數組(二):ArrayList的實現和Arrays類的使用

2019-11-10 17:31:52
字體:
來源:轉載
供稿:網友

一、數組是否可以變長?

我們都知道,數組時定長的,初始化時一定要給定長度,由于這個長度的問題,我們在實際的開發中,會更傾向于使用容器,如ArrayList等,使用容器類時,無需考慮長度問題,因為容器已經幫我們處理了,那么數組就沒有辦法變長了嗎?當然不是,ArrayList就是基于數組實現的,我們可以看看ArrayList是如何處理的

二、ArrayList的實現原理

ArrayList用一個Object數組作為其內部操作,并有一個成員變量size代表容器的長度

PRivate transient Object[] elementData; private int size;

添加數據時,調用add()方法:

public boolean add(E e) { ensureCapacityInternal(size + 1); // Increments modCount!! elementData[size++] = e; return true; }

調用add時,首先調用ensureCapacityInternal方法,該方法的目的是擴容,將數組的長度增加1

private void ensureCapacityInternal(int minCapacity) { modCount++; // overflow-conscious code if (minCapacity - elementData.length > 0) grow(minCapacity);}

而在ensureCapacityInternal中,首先判斷擴容是否有溢出問題,沒有溢出問題,就調用grow,進行擴容

private void grow(int minCapacity) { // 溢出處理 int oldCapacity = elementData.length; int newCapacity = oldCapacity + (oldCapacity >> 1); if (newCapacity - minCapacity < 0) newCapacity = minCapacity; if (newCapacity - MAX_ARRAY_SIZE > 0) newCapacity = hugeCapacity(minCapacity); // 擴容處理 elementData = Arrays.copyOf(elementData, newCapacity); }

這是擴容的核心代碼,前面代碼都是溢出處理,關鍵在于最后一句

elementData = Arrays.copyOf(elementData, newCapacity)

API文檔的解釋是:復制指定的數組,截取或用 null 或 0 填充(如有必要),以使副本具有指定的長度

也就是說,通過Arrays.copyOf,將數組elementData的長度擴大到newCapacity,擴大的部分填充由數組類型決定

例如:

int[] a = new int[]{1,2}; System.out.println("擴容前長度:" + a.length); a = Arrays.copyOf(a, 3); System.out.println("擴容后長度:" + a.length); System.out.println("填充的數據:" + a[2]);

輸出: 擴容前長度:2 擴容后長度:3 填充的數據:0

三、Arrays類的使用

Arrays類包含用來操作數組(比如排序和搜索)的各種方法,這個類是必須熟練使用的! 該類的常用方法有:

方法 解釋
asList(T… a) 返回一個受指定數組支持的固定大小的列表
copyOf(int[] original,int newLength) 復制指定的數組,填充的數據由數組類型決定,以使副本具有指定的長度
copyOfRange(long[] original, int from, int to) 將指定數組的指定范圍復制到一個新數組
equals(int[] a, int[] a2) 如果兩個指定的 int 型數組彼此相等,則返回 true
fill(int[] a, int val) 將指定的 int 值分配給指定 int 型數組的每個元素
sort(int[] a) 對指定的 int 型數組按數字升序進行排序
以上只用int類型數組做為example,同理其他類型數組同樣的操作

四、數組的淺拷貝,copyOf的問題

當數組類型不是基本數據類型時,數組內存放的是對象的引用,因此在copyOf復制對象數組時,千萬要注意,復制的對象的引用而不是對象本身!

class Person{ int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; }}public class Array2 { public static void main(String[] args) { Person p = new Person(); p.setAge(20); Person[] a = new Person[]{p}; Person[] b = Arrays.copyOf(a, a.length); a[0].setAge(30); System.out.println("a的年齡:" + a[0].getAge()); System.out.println("b的年齡:" + b[0].getAge()); }}

輸出: a的年齡:30 b的年齡:30

可以看見,a改變其值后,連b的值都改變了,這就是淺拷貝問題

有關于深淺拷貝的博文,參考: 漸析java的淺拷貝和深拷貝:http://www.cnblogs.com/chenssy/p/3308489.html。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美日韩在线一区| 久久久久久久久久婷婷| 狠狠躁夜夜躁人人躁婷婷91| 国产精品久久久久久久久久久久久| 中文字幕亚洲精品| 成人激情视频网| 亚洲精品大尺度| 精品国产一区二区三区久久久| 国产精彩精品视频| 午夜剧场成人观在线视频免费观看| 欧美成人激情视频免费观看| 日韩国产在线看| 久久99久久99精品免观看粉嫩| 成人国产精品免费视频| 国产免费亚洲高清| 久久精品小视频| 国产精品香蕉国产| 欧美午夜影院在线视频| 欧美性资源免费| 日韩av在线免费看| 一本色道久久88综合日韩精品| 欧美激情在线狂野欧美精品| 国产精品一久久香蕉国产线看观看| 欧美天堂在线观看| 久久久久久亚洲精品中文字幕| 日韩中文有码在线视频| 久久精品国产一区二区三区| 插插插亚洲综合网| 日韩大胆人体377p| 亚洲欧美日韩第一区| 国产精品久久久久久av下载红粉| 亚洲加勒比久久88色综合| 欧美性在线视频| 在线观看国产成人av片| 2019av中文字幕| 国产精品人人做人人爽| 亚洲美腿欧美激情另类| 欧美在线一级视频| 久久久久久国产免费| 亚洲最大福利视频网站| 国产精品黄色影片导航在线观看| 久久精品国产欧美激情| 日韩国产欧美区| 91精品啪aⅴ在线观看国产| 免费99精品国产自在在线| 日本精品视频在线| 午夜精品一区二区三区在线视| 91精品国产91久久久久久久久| 国产精品一区av| 91久久精品国产| 国产精品久久久久久久av大片| 国产日韩换脸av一区在线观看| www.亚洲人.com| 国a精品视频大全| 在线观看欧美成人| 91精品视频免费| 亚洲精品国精品久久99热一| 国产精品1234| 国产精品成av人在线视午夜片| 91成品人片a无限观看| 精品中文字幕乱| 韩剧1988在线观看免费完整版| 麻豆国产va免费精品高清在线| 国产精品成人一区二区| 欧美午夜性色大片在线观看| 97久久精品视频| 91免费的视频在线播放| 68精品久久久久久欧美| 国产精品视频久久久久| 成人免费在线网址| 国产精品av网站| 国产91成人video| 久久精品国产一区二区三区| 宅男66日本亚洲欧美视频| 亚洲激情在线观看视频免费| 日本欧美中文字幕| 日韩中文字幕免费视频| 国产999精品| 国产成人综合久久| 日韩在线视频二区| 精品在线欧美视频| 久久人人爽人人爽爽久久| 亚洲成人黄色在线观看| 精品久久久999| www国产91| 欧美精品激情在线| 91国自产精品中文字幕亚洲| x99av成人免费| 日韩av免费一区| 欧美性猛交xxxx乱大交3| 国产精品旅馆在线| 欧美激情精品久久久久久变态| 日韩欧美成人免费视频| 91高清视频免费观看| 成人免费xxxxx在线观看| 成人黄色免费网站在线观看| 国产www精品| 亚洲国产精品99| 中文字幕在线亚洲| 在线视频免费一区二区| 美女国内精品自产拍在线播放| 欧美激情免费在线| 国产欧美日韩视频| 川上优av一区二区线观看| 久久精彩免费视频| 欧美一区二区三区图| 欧美第一淫aaasss性| 国产成人精品午夜| 国产一区二区三区在线观看网站| 97成人精品区在线播放| 亚洲精品免费一区二区三区| 久久久日本电影| 一本色道久久88综合日韩精品| 欧美另类第一页| 亚洲欧美色图片| 国产国语刺激对白av不卡| 国产精品亚洲网站| 91精品在线看| 中文字幕久久精品| 欧美大成色www永久网站婷| 91在线观看免费观看| 国产国产精品人在线视| 国产欧美日韩中文字幕| 亚洲老板91色精品久久| 亚洲а∨天堂久久精品喷水| 欧美猛交ⅹxxx乱大交视频| 色婷婷**av毛片一区| 欧美极品第一页| 一本色道久久88综合日韩精品| 欧美有码在线观看| 91精品国产免费久久久久久| 欧美另类精品xxxx孕妇| 中文字幕在线看视频国产欧美| 伊人成人开心激情综合网| 538国产精品一区二区免费视频| 在线看福利67194| 91网在线免费观看| 中文字幕精品一区二区精品| 国产欧美日韩免费看aⅴ视频| 91精品国产乱码久久久久久蜜臀| 亚洲а∨天堂久久精品喷水| 日韩视频在线一区| 国产精品福利观看| 97av在线影院| 最好看的2019的中文字幕视频| 色综合久久中文字幕综合网小说| 国产综合香蕉五月婷在线| 国产精品欧美日韩久久| 欧美日韩亚洲网| 日韩精品一二三四区| 亚洲综合第一页| 国产精品免费视频xxxx| 91色在线视频| 在线精品播放av| 国产亚洲精品激情久久| 热99精品里视频精品| 青青a在线精品免费观看| 中文字幕日韩有码| 亚洲欧美日韩精品| 欧美精品第一页在线播放| 亚洲影院高清在线| 国产成人精品a视频一区www| 久久精品久久久久久| 精品国产精品自拍|