Queue 與List, LinkedList與 ArrayList 用法與區(qū)別
List 是一個接口,不能實例化,通過實例化ArrayList 或者LinkedList來調(diào)用
List list = new ArrayList()
;
|--List:元素是有序的(怎么存的就怎么取出來,順序不會亂),元素可以重復(fù)(角標(biāo)1上有個3,角標(biāo)2上也可以有個3)因為該集合體系有索引,
|-- ArrayList:底層的數(shù)據(jù)結(jié)構(gòu)使用的是數(shù)組結(jié)構(gòu)(數(shù)組長度是可變的百分之五十延長)(特點是查詢很快,但增刪較慢)線程不同步
|-- LinkedList:底層的數(shù)據(jù)結(jié)構(gòu)是鏈表結(jié)構(gòu)(特點是查詢較慢,增刪較快)
|-- Vector:底層是數(shù)組數(shù)據(jù)結(jié)構(gòu) 線程同步(數(shù)組長度是可變的百分之百延長)(無論查詢還是增刪都很慢,被ArrayList替代了)
List 接口下的方法有:
boolean add(int index, E element)
boolean addAll(index, collection)
boolean remove(int index)
set(int index, E element) //修改指定角標(biāo)的元素,返回修改的元素
get( int index) //返回列表中指定位置的元素
subList(int fromIndex, int toIndex) 返回指定范圍間(fromIndex(包括) toIndex(不包括))的元素
Queue接口與List、Set同一級別,都是繼承了Collection接口
LinkedList
實現(xiàn)了Queue
接口。Queue
接口窄化了對LinkedList
的方法的訪問權(quán)限(即在方法中的參數(shù)類型如果是Queue
時,就完全只能訪問Queue
接口所定義的方法 了,而不能直接訪問LinkedList
的非Queue
的方法),以使得只有恰當(dāng)?shù)姆椒ú趴梢允褂谩?br>
BlockingQueue
繼承了Queue
接口。
隊列是一種數(shù)據(jù)結(jié)構(gòu).它有兩個基本操作:在隊列尾部加人一個元素,和從隊列頭部移除一個元素就是說,隊列以一種先進(jìn)先出的方式管理數(shù)據(jù),如果你試圖向一個 已經(jīng)滿了的阻塞隊列中添加一個元素或者是從一個空的阻塞隊列中移除一個元索,將導(dǎo)致線程阻塞.在多線程進(jìn)行合作時,阻塞隊列是很有用的工具。
工作者線程可 以定期地把中間結(jié)果存到阻塞隊列中而其他工作者線線程把中間結(jié)果取出并在將來修改它們。隊列會自動平衡負(fù)載。如果第一個線程集運(yùn)行得比第二個慢,則第二個 線程集在等待結(jié)果時就會阻塞。如果第一個線程集運(yùn)行得快,那么它將等待第二個線程集趕上來。下表顯示了jdk1.5中的阻塞隊列的操作:
add 增加一個元索 如果隊列已滿,則拋出一個IIIegaISlabEepeplian異常
remove 移除并返回隊列頭部的元素 如果隊列為空,則拋出一個NoSuchElementException異常
element 返回隊列頭部的元素 如果隊列為空,則拋出一個NoSuchElementException異常
offer 添加一個元素并返回true 如果隊列已滿,則返回false
poll 移除并返問隊列頭部的元素 如果隊列為空,則返回null
peek 返回隊列頭部的元素 如果隊列為空,則返回null
put 添加一個元素 如果隊列滿,則阻塞
take 移除并返回隊列頭部的元素 如果隊列為空,則阻塞
LinkedList 繼承List接口,特有方法:
addFirst(); 在頭部添加元素 addLast();在尾部添加元素
getFirst(); getLast(); 獲取元素但不刪除
removeFirst(); removeLast(); 獲取并且刪除
jkd1.6中出現(xiàn)了替代方法
offerFirst(); offerLast();
peekFirst(); peekLast(); 獲取元素,但是元素不被刪除。如果集合中沒有元素,會返回null
pollFirst(); pollLast(); 獲取元素,但是元素被刪除。如果集合中沒有元素,會返回null
ArrayList繼承List接口,特有方法:
Count屬性 記錄當(dāng)前列表的元素個數(shù)
Capacity屬性 記錄能包含的最大數(shù)量,可改
Add方法用于添加一個元素到當(dāng)前列表的末尾
AddRange方法用于添加一批元素到當(dāng)前列表的末尾
Remove方法用于刪除一個元素,通過元素本身的引用來刪除
RemoveAt方法用于刪除一個元素,通過索引值來刪除
RemoveRange用于刪除一批元素,通過指定開始的索引和刪除的數(shù)量來刪除
Insert用于添加一個元素到指定位置,列表后面的元素依次往后移動
InsertRange用于從指定位置開始添加一批元素,列表后面的元素依次往后移動
另外,還有幾個類似的方法:
Clear方法用于清除現(xiàn)有所有的元素
Contains方法用來查找某個對象在不在列表之中