JDK source 之 ArrayList 需要注意事项
生活随笔
收集整理的這篇文章主要介紹了
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; }indexOf 或者 lastIndexOf 的使用
這兩個方法內部都是遍歷實現的,所以在數組很大的時候盡量不要使用這兩個方法,以免影響效率。
時間復雜度相關
GC 相關的借鑒
remove 和 clear 操作之后都會做一次釋放資源的操作,目的是釋放資源,以便GC回收。
轉載于:https://www.cnblogs.com/liushijie/p/5273073.html
總結
以上是生活随笔為你收集整理的JDK source 之 ArrayList 需要注意事项的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 粉丝数超750万 董宇辉回应个人账号停更
- 下一篇: 品牌首款VR头显!联想拯救者官宣VR70