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

首頁 > 編程 > Java > 正文

Java Collections的常見問題

2019-11-06 06:30:40
字體:
來源:轉載
供稿:網友

列舉幾個關于java Collections的常見問題并給出答案。

1. 什么時候用LinkedList,什么時候用ArrayList?

ArrayList是使用數組實現的list,本質上就是數組。ArrayList中的元素可以通過索引隨機獲取一個元素。但是如果該數組已滿,當添加新元素時需要分配一個新的數組然后將原來數組的元素移動過去,需要O(n)的時間復雜度。添加或刪除一個元素需要移動數組中的其他元素。這是ArrayList最大的缺點。

LinkedList是一個雙向鏈表。因此,當需要獲取list中某個元素,需要從頭到尾遍歷list。另一方面,在鏈表中添加或刪除元素很快,只需要O(1)的時間復雜度。從空間上來說,在鏈表中一個節點需要兩個額外的指針來指向它的PRevious和next節點。

總結:

從時間復雜度來說,如果對list增加或刪除操作較多,優先用LinkedList;如果查詢操作較多,優先用ArrayList。

從空間復雜度來說,LinkedList會占用較多空間。

2. 如何邊遍歷邊移除Collection中的元素

邊遍歷邊修改Collection的唯一正確方式是使用Iterator.remove()方法,如下:

12345Iterator<Integer> it = list.iterator();while(it.hasNext()){    // do something    it.remove();}

一種最常見的錯誤代碼如下:

123for(Integer i : list){    list.remove(i)}

運行以上錯誤代碼會報ConcurrentModificationException異常。這是因為當使用foreach(for(Integer i : list))語句時,會自動生成一個iterator來遍歷該list,但同時該list正在被Iterator.remove()修改。在Java中,一般不允許一個線程在遍歷collection時另一個線程在修改它。

3. 如何將List轉化成int[]?

很多人可能認為只需用List.toArray()即可,其實不然。List.toArray()方法只可能得到Integer[],無法得到int[]。

最簡單的方法是使用Apache Commons Lang庫中的ArrayUtils。

1int[] array = ArrayUtils.toPrimitive(list.toArray(newInteger[0]));

在JDK中,沒有捷徑。需要注意的是,不能直接使用List.toArray(),因為這樣會將List轉化成Integer[]而不是int[]。正確的做法如下:

1234int[] array = newint<divclass="list "></div>;for(inti = 0; i < list.size(); i++){    array[i] = list.get(i);}

4. 如何將int[]轉化成List?

同上,很多人以為只需用Arrays.asList()即可,其實不然。因為不能以int[]作為該方法的參數,要的話也只能是Integer[]。

關于Arrays.asList()方法有如下特性:

1.該方法對于基本數據類型的數組支持并不好,當數組是基本數據類型時不建議使用2.當使用asList()方法時,數組就和列表鏈接在一起了。當更新其中之一時,另一個將自動獲得更新。因為asList獲得的List實際引用的就是數組 注意:僅僅針對對象數組類型,基本數據類型數組不具備該特性。3.asList得到的數組是的沒有add和remove方法的。因為asList返回的List是Arrays中的內部類,而該類并沒有定義add和remove方法。

那么如何將int[]轉化成List呢?

還是得自己實現:

12345int[] array = {1,2,3,4,5};List<Integer> list = newArrayList<Integer>();for(inti: array) {  list.add(i);}

5. 過濾一個Collection最好的方法是什么?

如過濾掉list中大于5的整數。

1234567Iterator<Integer> it = list.iterator();while(it.hasNext()){    inti = it.next();    if(i > 5) {  //過濾掉大于5的整數        it.remove();    }}

6. 將List轉化成Set最簡單的方法?

有兩種方法,取決于你怎么要怎么定義兩個元素相等。第一種方法是將list放入HashSet里,該方法元素是否相等是通過它們的hashCode()來比較的。如果需要自己定義比較的方法,需要用TreeSet。

1Set<Integer> set = newHashSet<Integer>(list);
12Set<Integer> set = newTreeSet<Integer>(aComparator);set.addAll(list);

7. 如何刪除ArrayList中重復的元素?

如果不關心元素在ArrayList中的順序,可以將list放入set中來刪除重復元素,然后在放回list。

123Set<Integer> set = newHashSet<Integer>(list);list.clear();list.addAll(set);

如果關心元素在ArrayList中的順序,可以用LinkedHashSet。

8. 有序的collection

Java里有很多方法來維持一個collection有序。有的需要實現Comparable接口,有的需要自己指定Comparator。

Collections.sort()可以用來對list排序。該排序是穩定的,并且可以保證nlog(n)的性能。PriorityQueue提供排序的隊列。PriorityQueueCollections.sort()的區別是,PriorityQueue動態維護一個有序的隊列(每添加或刪除一個元素就會重新排序),但是只能獲隊列中的頭元素。如果collection中沒有重復的元素,TreeSet是另一個選擇。跟PriorityQueue一樣的是,TreeSet也動態維護一個有序的集合??梢詮?code style="border:0px; margin:0px; padding:0px; font-family:Monaco,Consolas,'Andale Mono','DejaVu Sans Mono',monospace">TreeSet中獲取最大和最小的元素。

總結:Collections.sort()提供一個一次排序的list。PriorityQueueTreeSet動態維護排序的collection。

9. 拷貝list

有兩種方法可以用來拷貝list。一種是使用ArrayList構造器。

1ArrayList<Integer> dstList = newArrayList<Integer>(srcList);

另一種是使用Collections.copy()。

12ArrayList<Integer> dstList = newArrayList<Integer>(srcList.size());Collections.copy(dstList, srcList);

需要注意的是,使用該方法的話目標list至少跟源list長度一樣長。否則會報IndexOutOfBoundsException異常。

另外有兩點需要注意:

兩種方法都是淺拷貝Collections.copy()方法的兩個參數必須都是list,而ArrayList方法參數只要是collection即可,因此ArrayList方法更通用。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美交受高潮1| 97久久久久久| 午夜精品一区二区三区av| 亚洲网站在线看| 精品久久香蕉国产线看观看亚洲| 深夜福利91大全| 亚洲国产欧美一区二区三区同亚洲| 国产999在线| 蜜臀久久99精品久久久无需会员| 日韩在线精品一区| 97超级碰在线看视频免费在线看| 日韩网站在线观看| 91九色国产在线| 欧美激情日韩图片| 精品视频在线播放色网色视频| 欧美日本啪啪无遮挡网站| 精品日本美女福利在线观看| 亚洲天堂成人在线| 久久中文字幕在线| 欧美日韩成人在线播放| 亚洲r级在线观看| 亚洲第一精品久久忘忧草社区| 国产日韩欧美中文| 日韩美女主播视频| 成人乱人伦精品视频在线观看| 高跟丝袜欧美一区| 91沈先生作品| 97视频在线观看视频免费视频| 国产成人一区三区| 久久久伊人日本| 欧美日韩国产中文精品字幕自在自线| 亚洲电影在线观看| 国产精品美女av| 久久亚洲精品网站| 青草成人免费视频| 正在播放亚洲1区| 亚洲欧洲成视频免费观看| 亚洲**2019国产| 91午夜在线播放| 亚洲色图15p| 国内精品在线一区| 欧美性生交xxxxx久久久| 成人av资源在线播放| 日韩不卡在线观看| 啪一啪鲁一鲁2019在线视频| 欧美成人午夜激情| 人人做人人澡人人爽欧美| 亚洲精品一区二区三区婷婷月| 欧美激情免费观看| 午夜精品一区二区三区在线播放| 国内伊人久久久久久网站视频| 亚洲精品一区二区三区婷婷月| 亚洲欧美日韩久久久久久| 久久亚洲精品一区| 久久久久日韩精品久久久男男| 成人激情黄色网| www亚洲精品| 日韩高清电影免费观看完整版| 成人欧美一区二区三区黑人| 91精品国产综合久久香蕉最新版| 国产精品久久久久久搜索| 一本色道久久88综合亚洲精品ⅰ| 国产成人综合av| 91亚洲精品视频| 亚洲国产成人久久综合一区| 浅井舞香一区二区| 国产精品视频公开费视频| 久久理论片午夜琪琪电影网| 中文字幕在线看视频国产欧美在线看完整| 性亚洲最疯狂xxxx高清| 久久久电影免费观看完整版| 91中文精品字幕在线视频| 国产精品高潮粉嫩av| 2019中文字幕在线| 在线观看成人黄色| 精品国产1区2区| 91免费的视频在线播放| 欧美国产日韩一区二区| 福利视频导航一区| 韩国日本不卡在线| 4438全国亚洲精品在线观看视频| 久久久久久亚洲| 午夜精品一区二区三区视频免费看| 欧洲s码亚洲m码精品一区| www日韩中文字幕在线看| 亚洲欧美在线免费观看| 亚洲男子天堂网| 亚洲老头同性xxxxx| 亚洲综合精品一区二区| 亚洲免费av片| 97精品国产aⅴ7777| 隔壁老王国产在线精品| 久久全球大尺度高清视频| 国产精品扒开腿做爽爽爽男男| 日韩av免费在线播放| 成人黄色在线免费| 亚洲精品白浆高清久久久久久| 亚洲精品国产美女| 91精品在线一区| 国产偷国产偷亚洲清高网站| 日韩成人av在线播放| 欧美一区二区色| 秋霞午夜一区二区| 91久久精品美女| 亚洲色图在线观看| 亚洲a在线观看| 欧美一级片久久久久久久| 日韩美女视频中文字幕| 亚洲欧美综合v| 色综合亚洲精品激情狠狠| 精品亚洲精品福利线在观看| 亚洲91精品在线观看| 国产激情久久久久| 国产成人啪精品视频免费网| 亚洲3p在线观看| 欧洲美女7788成人免费视频| 久久久久久久999精品视频| 国产精品成人免费电影| 九色91av视频| 亚洲韩国青草视频| 亚洲国产日韩欧美在线99| 人九九综合九九宗合| 国产97免费视| 欧美亚洲国产日韩2020| 久热精品视频在线观看一区| 午夜精品久久久久久久男人的天堂| 日韩美女视频免费看| 91亚洲午夜在线| 久久久免费精品视频| 日韩在线观看网站| 91亚洲国产成人久久精品网站| 国产精品一区电影| 国产精品激情自拍| 亚洲精品色婷婷福利天堂| 亚洲欧洲日韩国产| 亚洲精品久久久久久久久| 日韩欧美在线观看| 91伊人影院在线播放| 亚洲美女动态图120秒| 国产日产欧美精品| 欧美高清视频免费观看| 精品久久久国产精品999| 亚洲第一男人av| 久久久噜噜噜久久久| 亚洲欧美色婷婷| 中文字幕精品在线| 亚洲的天堂在线中文字幕| 国产精品第三页| 国产精国产精品| 日韩在线视频线视频免费网站| 日韩av在线导航| 欧美日韩一二三四五区| 97在线视频免费观看| 在线观看久久av| 欧美视频免费在线观看| 欧美高清在线视频观看不卡| 色噜噜狠狠狠综合曰曰曰88av| 日韩av在线一区二区| 久久久国产影院| 亚洲人成在线免费观看| 欧美激情国产高清| 国产精品自产拍在线观看| 精品国偷自产在线视频99| 久久99久国产精品黄毛片入口|