程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> jdk順序表筆記,jdk順序筆記

jdk順序表筆記,jdk順序筆記

編輯:JAVA綜合教程

jdk順序表筆記,jdk順序筆記


一、AbstractCollection

提供了集合的最大實現 繼承該類,必須實現size()和iterator(),因為該類操作集合都是通過iterator

二、fail-fast策略

該策略在集合框架中多次被應用 一種多線程對同一集合操作的保護措施,確保操作目標沒有被其他線程操作過,與cas思想有異曲同工之處 具體在集合中的實現: 定義一個全局變量modCount,表示集合被修改的次數 每次進行動態操作的時候,modCount++ 在Iterator中定義一個全局變量expectedModCount, 每次操作Iterator的時候都會比較modCount和expectedModCount,相等則認為這個集合沒有被並發修改,否則會拋出ConcurrentModificationException 所以只要有modCount這個變量的,都是線程不安全的,這種集合最好使用迭代器,因為直接操作不會檢查集合有沒有被並發修改 使用volatile修飾modCount 被volatile修飾的變量,程序中的每次引用,處理器都會從內存(共享內存)中去讀值,而不是從寄存器(線程獨有內存)中獲取 這使得fail-fast策略更可靠

三、AbstractList

提供了順序表的最大實現 該類實現了迭代器 繼承該類,需要實現get方法,因為迭代器的next是調用了get

四、ArrayList

1.初始容量為10

構造器(集合)和addAll,是深拷貝,因為調的是AbstractCollection.toArray()---->Arrays.copyOf()------>System.arraycopy()

2.多用會用trimToSize

因為順序表一建立的時候,就會創建一個初始大小的數組,這樣就會有空余的位置,調用這個方法可以把多余的位置清理,節約空間 實際長度是存儲數組的length,不是全局變量size,size意味著有多個個元素是有數據的

3.擴展容量

默認是增大一半的空間,要考慮int溢出(溢出<0),以及虛擬機的最大內存 必用ensureCapacity(int minSize),需要增大容量的時候,都要調用 都要確認這個容量是否支持,不支持則會擴展容量 防止數組越界

4.toArray,clone都是深度拷貝

5.維護的數組是沒有泛型的,當需要獲取元素的時候,才去轉型

6.對於動態操作

並沒有像通常數據結構的書那樣子,要移動操作元素後續的節點,而是直接拷貝一份

7.養成好習慣

動態操作了之後,不單單只是移動指針,要將不存在的元素位置設置為null,目的是為了讓垃圾收集器工作

8.提供一些安全性低,但是快速的private方法

比如remove(Obj),獲取下標了之後,就可以調用一個fastRemove(index),不需要二次比較值

9.subList(from,to)

返回的是該集合的視圖,視圖是淺拷貝,會直接操作該集合   a192136220-94766

查看原文:http://blog.zswlib.com/2016/10/26/jdk%e9%a1%ba%e5%ba%8f%e8%a1%a8%e7%ac%94%e8%ae%b0/

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved