国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 詳解Java 集合類 List 的那些坑

詳解Java 集合類 List 的那些坑

2020-08-24 00:37mghio Java教程

這篇文章主要介紹了Java 集合類 List 的那些坑,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

現(xiàn)在的一些高級編程語言都會提供各種開箱即用的數(shù)據(jù)結構的實現(xiàn),像 Java 編程語言的集合框架中就提供了各種實現(xiàn),集合類包含 Map 和 Collection 兩個大類,其中 Collection 下面的 List 列表是我們經(jīng)常使用的集合類之一,很多的業(yè)務代碼都離不開它,今天就來看看 List 列表的一些坑。

第一個坑:Arrays.asList 方法返回的 List 不支持增加、刪除操作

例如我們執(zhí)行以下代碼:

?
1
2
List<String> strings = Arrays.asList("m", "g");
strings.add("h");

會拋出 java.lang.UnsupportedOperationException 異常,此時你內心 OS what?明明返回的 ArrayList 為啥不能往里面增加元素,這以后還能好好的增加元素嗎? ,然后果斷開啟 Debug 大法:

詳解Java 集合類 List 的那些坑

發(fā)現(xiàn)返回的 ArrayList 并不是我們常用的 java.util.ArrayList ,而是 Arrays 的內部類 java.util.Arrays.ArrayList 。進入方法 Arrays.asList 源碼如下:

?
1
2
3
public static <T> List<T> asList(T... a) {
  return new ArrayList<>(a);
}

方法返回的是 Arrays 的靜態(tài)內部類 java.util.Arrays.ArrayList ,該類雖然和 java.util.ArrayList 也繼承自抽象類 java.util.AbstractList ,但是通過該類的源碼發(fā)現(xiàn)它并沒有對抽象父類 AbstractListadd 方法默認就是拋出 java.lang.UnsupportedOperationException 異常。

詳解Java 集合類 List 的那些坑

這個坑的根本原因是我們調用返回的 stringsadd 方法是繼承自抽象父類的 add 方法,而抽象父類的方法默認就是拋出 java.lang.UnsupportedOperationException 這個異常。

第二個坑,Arrays.asList 方法返回的新 List 和該方法原始入?yún)?shù)組修改會相互影響

Arrays.asList 方法除了上面這個 不支持增加、刪除元素 這個坑之外,還有另外一個坑:

詳解Java 集合類 List 的那些坑

從以上代碼可以發(fā)現(xiàn),對原始數(shù)組的修改會影響我們通過 Arrays.asList 方法獲得的新 List ,深入 java.util.Arrays.ArrayList 的源碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
private static class ArrayList<E> extends AbstractList<E>
    implements RandomAccess, java.io.Serializable
  {
    private static final long serialVersionUID = -2764017481108945198L;
    private final E[] a;
 
    ArrayList(E[] array) {
      a = Objects.requireNonNull(array);
    }
    
    ...
    
   }

可以發(fā)現(xiàn)是直接使用了原始的數(shù)組,所有當我們使用 Arrays.asList 方式獲得的 List 時要特別注意,因為共享了數(shù)組,相互修改時可能產(chǎn)生一些意想不到的 Bug。標準的姿勢之一是將其作為 ArrayList 構造方法的參數(shù)重新 new 一個 List 出來即可(e.g. List<String> stringList = new ArrayList<>(Arrays.asList(arrays)) )或者通過 Guava 庫中的 Lists.newArrayList ,將返回的新 List 和原始的數(shù)組解耦,就不會再互相影響了。

第三個坑,直接遍歷 List 集合刪除元素會報錯

在直接遍歷集合元素時增加、刪除元素會報錯,比如執(zhí)行如下代碼:

?
1
2
3
4
5
6
List<String> stringList = Lists.newArrayList("m", "g", "h");
for (String s : stringList) {
  if (Arrays.asList("m", "h").contains(s)) {
    stringList.remove(s);
  }
}

以上代碼可以正常編譯通過,但是執(zhí)行時會拋出 java.util.ConcurrentModificationException 異常,查看其源碼可以發(fā)現(xiàn),刪除元素方法 remove 會使集合結構發(fā)生修改,也就是 modCount( 集合實際修改的次數(shù))會修改,在循環(huán)過程中,會比較當前 List 的集合實際修改的次數(shù) modCount 與迭代器修改的次數(shù) expectedModCount ,而 expectedModCount 是初始化時的 modCount , 二者不相等,就會報 ConcurrentModificationException 異常。解決方法主要有兩種方式,1.使用 ArrayList 的迭代器方式遍歷,然后調用其中的方法。2.在 JDK 1.8+ 可以使用 removeIf 方法進行刪除操作。

最后扎心一問:調用 ArrayListremove 方法傳入 int 基本類型的數(shù)字和 Integer 包裝類型的數(shù)字,執(zhí)行結果是不是一樣的?

到此這篇關于詳解Java 集合類 List 的那些坑的文章就介紹到這了,更多相關Java List集合類坑 內容請搜索服務器之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://segmentfault.com/a/1190000023728834

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 日韩欧美在线综合 | 日韩精品一区二区三区在线观看视频网站 | 亚洲一区电影 | 在线观看国产成人av片 | 成人午夜精品一区二区三区 | 国产亚洲精品精品国产亚洲综合 | 狠狠色综合网站久久久久久久 | 97伦理片| 国产xxxx成人精品免费视频频 | 亚洲乱码国产乱码精品精的特点 | 国产午夜精品视频 | 欧美日韩中文字幕 | 这里只是精品 | 黄色一级免费大片 | 毛片免费在线播放 | 亚洲电影一区二区 | 久久综合伊人77777蜜臀 | 能看的av网站 | 国产成人精品免高潮在线观看 | av在线中文 | 国产成人免费在线 | 亚洲国产精品久久久久婷婷老年 | 国内精品久久久久久久影视简单 | 午夜影院在线观看 | 欧美日韩国产在线观看 | 一特黄a大片免费视频 视频 | 四虎影视| 久久久91精品国产一区二区三区 | 国内精品久久久久 | 一区二区久久 | 黄色大片网站 | 日韩中文字幕av在线 | 国产一级一级毛片女人精品 | 日韩国产 | 日本久久久久久 | 免播放器看av | 日韩一区二区三区电影在线观看 | 久久99精品久久久久久久青青日本 | 国产视频一区二区 | 免费视频成人国产精品网站 | 波多野结衣一二三四区 |