日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JDK source 之 ArrayList 需要注意事项

發布時間:2023/12/13 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JDK source 之 ArrayList 需要注意事项 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

線程安全

ArrayList內部沒有實現原子性操作,所以是非線程安全的。如果需要在線程安全的環境下使用List的話,需要使用Vector 或者CopyOnWriteArrayList,具體場景,自行深入了解。

擴容算法

// minCapacity 為需要的最小容量 private void grow(int minCapacity) {// overflow-conscious codeint oldCapacity = elementData.length;int newCapacity = oldCapacity + (oldCapacity >> 1);if (newCapacity - minCapacity < 0)newCapacity = minCapacity;if (newCapacity - MAX_ARRAY_SIZE > 0)newCapacity = hugeCapacity(minCapacity);// minCapacity is usually close to size, so this is a win:elementData = Arrays.copyOf(elementData, newCapacity); }private static int hugeCapacity(int minCapacity) {if (minCapacity < 0) // overflowthrow new OutOfMemoryError();return (minCapacity > MAX_ARRAY_SIZE) ?Integer.MAX_VALUE :MAX_ARRAY_SIZE; }
  • 如代碼所示,先在原來容量的基礎上進行 1.5 倍的擴容;
  • 如果擴容之后的值小于最小的容量需求,則使用最小容量需求;
  • 如果擴容之后超出數組的限制長度,則根據最小容量需求判斷使用Integer最大值還是數組限制長度。
  • indexOf 或者 lastIndexOf 的使用

    這兩個方法內部都是遍歷實現的,所以在數組很大的時候盡量不要使用這兩個方法,以免影響效率。

    時間復雜度相關

  • get 方法為 O(1);
  • add(E e) 方法在尾部添加,為 O(1),add(int index, E element)方法在中間添加,時間復雜度最壞情況為O(n);
  • remove 方法時間復雜度最壞情況為O(n)。
  • GC 相關的借鑒

    remove 和 clear 操作之后都會做一次釋放資源的操作,目的是釋放資源,以便GC回收。

    轉載于:https://www.cnblogs.com/liushijie/p/5273073.html

    總結

    以上是生活随笔為你收集整理的JDK source 之 ArrayList 需要注意事项的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。