java集合框架講解
java集合類從1.0開始不斷完善,其中使用了豐富的數據結構(數組,隊列,棧,鏈表,二叉樹,哈希表等),主要有list,set,map三大接口及其子類實現,爲我們提供了豐富的適應於不同場景的工具類。
在實際的開發中我們會遇到很多種需求場景,只有充分理解java集合框架下面的類的特點,具體場景需要使用什麼集合類纔會遊刃有餘。
list集合有一些共性方法增刪改查。
集合的遍歷有iterator和listiterator方法。其中後者是前者的子接口。
在使用iterator迭代時,不可以通過結合對象的方法操作集合中的元素,否則會發生concurrentModificationException異常。在迭代時只能使用迭代器的方法。
iterator:判斷、取出、刪除
listiterator: 添加、修改、判斷、取出、刪除。
Collection:
---- List:元素是有序的,元素可以重複,因爲該集合有索引。判斷元素是否相同用equals()方法.
-----ArrayList(動態數組):數據結構爲數組,查詢速度快,增刪慢,線程不同步。
默認有10個元素,擴大50%的增加。
-----LinkedList(鏈表、隊列、堆棧):數據結構爲鏈表,查詢速度慢,增刪快。
特有方法:1)、addFirst(),addLast(),
2)、getFirst(),getLast(),獲取元素但是不刪除.果集合中沒有元素,會產生
NoSuchElementException。
3)、 removeFirst(),removeLast(),獲取元素並刪除,如果集合中沒有元素,會產生
NoSuchElementException。
jdk1.6替代方法:offerFirst(),offerLast()
peekFirst(),peekLast()獲取元素不刪除。如果集合中沒有元素,會返回null.
pollFirst(),pollLast().獲取元素並刪除。如果集合中沒有元素,會返回null.
-----Vector:數據結構爲數組,線程同步,被ArrayList替代。(特有枚舉(名字過長)、addElement等)
容量需要擴大時,成倍增加.
---- Set:元素是無序的,元素不可以重複。存入和取出時的順序不一定一致。(set底層使用了Map集合)
-----HashSet:數據結構是哈希表,線程不同步。
通過hashCode()和equals()方法判斷元素是否相同和刪除操作.
如果元素的HashCode相同,會繼續判斷equals是否爲true。如果元素的HashCode值不同,不 會調用equals方法.
-----TreeSet:數據結構是二叉樹,可以對集合中的元素進行排序。
通過compareTo()方法判斷元素唯一性,compareTo方法返回0.
排序方法:1)元素自身實現comparable接口,或者實現一個comparator構造器。
2)當comparable和comparator都存在時,以comparator爲主。
三、Map集合:該集合存儲鍵值對,必須保證鍵的唯一性。
1.添加2.刪除clear,3.判斷containsValue,containsKey,isEmpty4.獲取get,size,values,entrySet,keySet.
添加元素如果出現相同的鍵,返回原來的值,並覆蓋。
Map集合兩種取出方式:
1):keySet 將集合中的key取出。
2)entrySet。Set<Map.Entry<K,V>>將Map集合中的映射關係存入到set集合中。
-----HashTable:數據結構是哈希表,不可以存入null鍵和null值。線程同步。(被HashMap替代)
-----HashMap:數據結構是哈希表,可以存入null鍵和null值,線程不同步。
通過hashCode和equals方法判斷相同
-----HashSet:數據結構是二叉樹,不同步,可以給鍵排序。
通過conparable和comparator比較。
四、線程安全類
在集合框架彙總,有些類是線程安全的,這些都是在JDK1.1中出現的。JDK1.2之後,出現了很多非線程安全類
-------Vector:比ArrayList多了線程安全
-------Stack:堆棧
-------HashTable:比HashMap多了線程安全
-------Enumeration:枚舉,相當於迭代器。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.