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

首頁 > 編程 > Java > 正文

詳解JAVA高質量代碼之數組與集合

2019-11-26 16:00:29
字體:
來源:轉載
供稿:網友

  1.性能考慮,優先選擇數組

  數組在項目開發當中使用的頻率是越來越少,特別是在業務為主的開發當中,首先數組沒有List,Set等集合提供的諸多方法,查找增加算法都要自己編寫,極其繁瑣麻煩,但由于List,Set等集合使用泛型支持后,存放的都為包裝類,而數組是可以使用基本數據類型,而使用基本數據類型的執行運算速度要比包裝類型快得多,而且集合類的底層也是通過數組進行實現.

  2.若有必要,使用變長數組

  在學習集合類當中,很多人喜歡將數組的定長拿來和集合類型的自變長來做比較,但其實這種比較并不合適,通過觀察集合類例如ArrayList的實現其實可以看出,所謂的集合變長,其實只是用婉轉的方式對原數組進行了擴容

  

復制代碼 代碼如下:

  public static T[] expandCapacity(T[] data, int newLength) {

  // 判斷是否為負值

  newLength = newLength < 0 ? 0 : newLength;

  // 生成新數組,拷貝原值并制定長度

  return Arrays.copyOf(data, newLength);

  }
 


  當性能要求高的時候,可以考慮使用對數組進行封裝使用,數組長度不變不是我們不使用它們的借口

  3.警惕數組的淺拷貝

  數組的淺拷貝在Java編程中亦是基礎中的基礎,淺拷貝是在為數組拷貝時,基本類型拷貝的是值,而引用類型拷貝的是引用地址,在上面的例子當中,拷貝數組使用的Arrays.copyOf為淺拷貝,在使用時需要注意

  4.在明確的場景下,為集合指定初始容量

  在我們平常的使用當中,因為集合類型是自動變長的,所以基本創建對象時不會為集合類附上初始值,就拿我們最常用的ArrayList來說明,我們首先要知道,當集合容量到達臨界點時,會將底層的數組進行copyOf的操作,生成新的數組,而新的數組容量為舊數組的1.5倍,而默認數組長度為10,當我們明確知道要放置入容器中的數據數量較多時,應該指明初始值,避免多次使用copyOf造成的性能開銷

  5.選擇合適的最值算法

  對數據進行最大值或最小值的查找,這是數據結構最基本的知識,在Java當中我們亦有很多種的方式進行實現,以下列舉2種算法

  

復制代碼 代碼如下:

  public static int getMaxByArray(int[] data) {

  // 最簡單自行實現的查找方式

  int max = data[0];

  for (int i = 1, size = data.length; i < size; i++) {

  max = max < i ? i : max;

  }

  return max;

  }


復制代碼 代碼如下:

  public static int getMaxByArray(int[] data) {

  // 先排序后獲取最后位

  Arrays.sort(data);

  return data[data.length - 1];

  }


  6.基本類型數組轉換陷阱!

  請觀察以下代碼

復制代碼 代碼如下:

  public static void main(String[] args) {

  int[] nums = new int[] { 1, 2, 3, 4, 5 };

  List list = Arrays.asList(nums);

  System.out.println(list.size());

  // 此時輸出的size為1

  }


  我們期望的結果是將數組中的元素通過Arrays.asList轉換到集合類當中,但事與愿違,我們只將數組本身增加了進入,并沒有將數組內的值分拆分開來,此時若然對集合List增加了泛型就會在編譯期間給出錯誤的提示,或將數組本身改變成Integer就可以解決問題

  7.asList方法產生的List對象不可更改

  通過上面的例子,我們可以看到使用Arrays.asList方法可以將一個數組轉換成一個List,那通過asList方法返回的List有什么特別呢?注意,這個返回的List是不支持更改的,原因是因為asList方法返回的,并不是java.util.ArrayList,而是Arrays工具類中的一個靜態私有內部類,雖然都有實現和ArrayList一樣的父類AbstractList,但在復寫add等方法時,卻是拋出了UnsupportedOperationException,這個靜態私有內部類只實現了size,toArray,get,contains這幾個方法

  8.對不同的數據結構使用不同的遍歷方式

  請觀看以下代碼

復制代碼 代碼如下:

  public static void main(String[] args) {

  // 以下為ArrayList集合的遍歷方式

  int num = 80 * 10000;

  List arrayList = new ArrayList(num);

  for (int i = 0, size = arrayList.size(); i < size; i++) {

  arrayList.get(i);

  }

  // 以下為LinkedList集合的遍歷方式

  List linkedList = new LinkedList();

  for (Integer integer : linkedList) {

  }

  }


  為什么對LinkedList和ArrayList要選擇不同的遍歷方式?

  1.因為ArrayList實現了RamdomAccess接口(隨機存取接口),RamdomAccess接口和Serializable,Cloneable接口一樣是Java中的標示接口,代表這個這個類可以隨機存取,對ArrayList來說就標志著,數據之間沒有關聯,即相鄰的兩個位置沒有互相依賴的關系,可以隨機訪問,

  2.Java中的foreach語法是iterator(迭代器)的變形用法,我們知道迭代器是23種設計模式的一種,但迭代器是需要知道兩個元素時間的關系的,不然怎么提供hasNext的支持呢?就是因為上一個元素要判斷下一個元素是否存在,強行建立了這種關系,違背了ArrayList隨機存取的特別

  3.在LinkedList中,因為是通過雙向鏈表的形式來存儲,所以對迭代器的支持非常好,因為LinkedList相鄰的兩個元素本來就存在關系所以在對LinkedList和ArrayList要采取不同的遍歷方式,讀者若然有興趣可以嘗試一下對LinkedList采用下標的形式訪問,會發現兩者的效率有較大的差距

  8.適時選擇ArrayList或LinkedList

  ArrayList和LinkedList的主要區別:

  1.ArrayList底層的數據結構為數組,而LinkedList底層結構為雙向鏈表

  2.在插入數據時,由于ArrayList每次插入后都需要將數組元素向后順延位置,而LinkedList只需要更改頭節點和尾節點即可完成插入操作,所以在插入操作較為頻繁時,優先使用LinkedList

  3.在刪除數據時,由于ArrayList要保持數組的有序性,當刪除后元素要亦需要向后或向前移位,而LinkedList照舊還是更改頭尾節點.

  4.在更新時,由于LinkedList會使用折半遍歷的方式進行查找定位元素再進行更新,對比起ArrayList的直接定位下標元素替換,ArrayList對更新的效率更佳

  5.LinkedList可以模擬隊列,通過LinkedList的addFirst,addLast等操作

  9.列表相等只需關心元素數據

  Java為了我們可以安心的面向List,Set,Map等接口進行編程,因此對集合類中的equlas進行了復寫,讓我們在比較兩個集合是否相等時,只需要比較元素數據是否相等即可,避免了因為替換集合實現類造成的錯誤Java代碼

復制代碼 代碼如下:

  public static void main(String[] args) {

  List arrayList = new ArrayList();

  arrayList.add(1);

  arrayList.add(2);

  List linkedList = new LinkedList();

  linkedList.add(1);

  linkedList.add(2);

  System.out.println(arrayList.equals(linkedList));

  // 不用關心具體實現,輸出為true

  }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品在线影院| 日韩在线播放视频| 日韩精品极品毛片系列视频| 91中文精品字幕在线视频| 久久久久久久91| 国产欧美一区二区| 另类美女黄大片| xvideos国产精品| 欧美国产日韩精品| 91嫩草在线视频| 欧美性视频网站| 国产在线拍偷自揄拍精品| 亚洲欧美在线播放| 亚洲自拍偷拍在线| 庆余年2免费日韩剧观看大牛| 日韩在线观看免费av| 亚洲第一偷拍网| 中文字幕国内精品| 亚洲精品日韩激情在线电影| 日韩av电影中文字幕| 日韩电影免费在线观看中文字幕| 高清日韩电视剧大全免费播放在线观看| 国产精品嫩草影院一区二区| 国产精品夜间视频香蕉| 午夜精品三级视频福利| 欧美日韩精品二区| 国产精品∨欧美精品v日韩精品| 亚洲国产高潮在线观看| 欧美日韩视频免费播放| 日韩精品视频免费专区在线播放| 不卡av在线网站| 亚洲二区中文字幕| 亚洲综合精品一区二区| 国产精品免费视频xxxx| 国产欧美一区二区三区久久| 国产欧美一区二区三区久久| 日本高清+成人网在线观看| 国产精品mp4| 美女久久久久久久| 欧美日本黄视频| 在线看片第一页欧美| 国产成人精品优优av| 国产精品久久久久久久久| 国产精品久久久久影院日本| 91久久久久久久久久| 亚洲午夜国产成人av电影男同| 国产日本欧美一区二区三区| 国产免费一区视频观看免费| 亚洲国产高清福利视频| 一区二区在线免费视频| 亚洲成成品网站| 久久久这里只有精品视频| 欧美成人中文字幕在线| 亚洲精品美女网站| 奇米四色中文综合久久| 一区二区三区亚洲| 国产精品自拍视频| 亚洲码在线观看| 欧美成人自拍视频| 中文日韩在线观看| 久久久久九九九九| 日韩av资源在线播放| 91免费的视频在线播放| 国产精品电影网站| 96sao精品视频在线观看| 欧美国产日本高清在线| 欧美孕妇孕交黑巨大网站| 色综合色综合久久综合频道88| 久久九九有精品国产23| 国产一区二区视频在线观看| 69久久夜色精品国产7777| 国产精品海角社区在线观看| 日本午夜在线亚洲.国产| 亚洲精品一区二区久| 国产精品久久一| 亚洲国产欧美一区二区丝袜黑人| 97久久伊人激情网| 欧美大全免费观看电视剧大泉洋| 国产一区二区黑人欧美xxxx| 久久久人成影片一区二区三区| 91亚洲精品久久久久久久久久久久| 欧美成年人在线观看| 三级精品视频久久久久| 亚洲欧洲午夜一线一品| 久久久精品一区| 亚洲xxxx妇黄裸体| 91精品综合久久久久久五月天| 日韩精品中文字幕在线播放| 中文字幕日韩免费视频| 久久av在线播放| www.欧美精品一二三区| 久久视频免费在线播放| 国产97在线观看| 美女国内精品自产拍在线播放| 91精品国产一区| 久久久精品电影| 97香蕉超级碰碰久久免费软件| 日本欧美一二三区| 欧美大片欧美激情性色a∨久久| 国产不卡av在线免费观看| 亚洲精品国产综合久久| 91成人免费观看网站| 一区二区在线视频播放| 国产91精品黑色丝袜高跟鞋| 日韩av在线免费看| 国产精品com| 欧美大全免费观看电视剧大泉洋| 91po在线观看91精品国产性色| 九九热这里只有在线精品视| 欧美中文在线观看国产| 亚洲精品不卡在线| 精品福利在线看| 97精品欧美一区二区三区| 91高清免费视频| 在线播放日韩欧美| 2018日韩中文字幕| 国产精品揄拍一区二区| 国产成人激情视频| 亚洲精品成人免费| 波霸ol色综合久久| 欧美精品在线极品| 成人观看高清在线观看免费| 亚洲国产欧美在线成人app| 亚洲国产精彩中文乱码av在线播放| 国产精品永久免费在线| 色悠悠国产精品| 亚洲欧美日韩中文在线| 欧美一级视频免费在线观看| 韩国精品久久久999| 亚州成人av在线| 国产福利视频一区| 亚洲免费中文字幕| 国产精品午夜一区二区欲梦| 午夜免费在线观看精品视频| 亚洲国产精久久久久久| 欧美一级淫片videoshd| 2021国产精品视频| 精品无人国产偷自产在线| 日韩av影院在线观看| 91美女片黄在线观看游戏| 日韩成人在线播放| 欧美极品第一页| 色偷偷噜噜噜亚洲男人的天堂| 日韩av123| 一色桃子一区二区| 在线一区二区日韩| 在线看日韩欧美| 久热精品视频在线免费观看| 欧美肥老妇视频| 国产日产久久高清欧美一区| 欧美日韩aaaa| 亚洲精品成a人在线观看| 欧美日韩中文字幕| 欧美日韩成人网| 亚洲色图校园春色| 久久九九精品99国产精品| 日韩电影第一页| 精品久久久久久久大神国产| 国产网站欧美日韩免费精品在线观看| 91爱爱小视频k| 欧美日韩电影在线观看| 欧美精品电影免费在线观看| 午夜精品一区二区三区在线视| 亚洲人成免费电影|