淺談JAVA集合框架(引的)
Java提供了數種持有物件的方式,包括語言內建的Array,還有就是utilities中提供的容器類(container classes),又稱群集類(collection classes)。集合在java中非常重要,在討論之前,先來看幾個面試中的經典問題。
1 Collection 和 Collections的區別。
2 List, Set, Map是否繼承自Collection介面。
3 ArrayList和Vector的區別。
4 HashMap和Hashtable的區別。
篇尾有答案,我們開始正題。
集合Collection介面
–Collection 是任何物件組,元素各自獨立,通常擁有相同的套用規則。Set List由它派生。
基本操作 增加元素add(Object obj); addAll(Collection c);
刪除元素 remove(Object obj); removeAll(Collection c);
求交集 retainAll(Collection c);
刪除元素 remove(Object obj); removeAll(Collection c);
求交集 retainAll(Collection c);
訪問/遍歷集合元素的好辦法是使用Iterator介面(迭代器用於取代Enumeration)
Public interface Iterator{
Public Boolean hasNext(};
Public Object next(};
Public void remove(};
}
集set
—沒有重複專案的集合
有三種特定型別的集可用
HashSet-基於雜湊表的集,加進雜湊表的元素要實現hashCode()方法
LinkedHashSet-對集迭代時,按增加順序返回元素
TreeSet-基於(平衡)樹的資料結構
清單List
—位置性集合。加進清單的元素可以加在清單中特定位置或加到末尾
有兩個特定版本
ArrayList(陣列表)-類似於Vector,都用於縮放陣列維護集合。區別:
一.同步性:Vector是執行緒安全的,也就是說是同步的,而ArrayList是執行緒序不安全的,不是同步的
二.資料增長:當需要增長時,Vector預設增長為原來一培,而ArrayList卻是原來的一半
LinkedList(連結串列)-是雙向連結串列,每個節點都有兩個指標指向上一節點和下一節點。
用在FIFO,用addList()加入元素 removeFirst()刪除元素
用在FILO,用addFirst()/removeLast()
ListIterator提供雙向遍歷next() previous(),可刪除、替換、增加元素
對映表Map
—用於關鍵字/數值對,像個Dictionary
處理Map的三種集合
關鍵字集KeySet()
數值集value()
專案集enrySet()
四個具體版本
HashMap-雜湊表的通用對映表
LinkedHashMap-擴充套件HashMap,對返回集合迭代時,維護插入順序
WeakHashMap-基於弱引用雜湊表的對映表,如果不保持對映表外的關鍵字的引用,則記憶體回收程式會回收它
TreeMap-基於平衡樹的對映表
HashMap-雜湊表的通用對映表
LinkedHashMap-擴充套件HashMap,對返回集合迭代時,維護插入順序
WeakHashMap-基於弱引用雜湊表的對映表,如果不保持對映表外的關鍵字的引用,則記憶體回收程式會回收它
TreeMap-基於平衡樹的對映表
Collections類,用於同步集合,還能改變集合只讀方式的類
e.g.:
Map mp=new HashMap();
mp=Collections.synchronizedMap(mp); //生成執行緒安全的對映表
mp=Collections.unmodifiableMap(mp); //生成只讀對映表
Comparable 自然順序的排序類 Comparator 面向樹的集合排序類
容器分類學(Container taxonomy)
集合介面: Collection List Set;Map Iterator ListIterator。
抽象類: AbstractCollection AbstractList AbstractSet AbstractMap AbstractSequentiaList。
老版本中的集合型別
Vector類
Vector,就是向量。一種異構的混合體,可以動態增加容量。對它的操作簡要如下
比如我們有一個Vector: Vector myVec=new Vector(a_Array.length)
取得vector的長度:myVec.size();
賦值:set(int position,Object obj) / setElementAt(Object obj, int position) –不支援動態增長
add(Object obj )/ addElement(Object obj) 在Vector末尾加入物件
e.g.:myVec.add(new a_Array[0]);
取出元素:get(int position) / getElement(int position)
Stack類
是Vector的子類。就是資料結構裡講濫了的堆疊(這個詞可簡稱棧,不要混淆於heap-堆)。後進先出的存取方式。
Stack()構造空棧
Empty()叛空
Search()檢查堆疊是否有元素
Peek()取得棧頂元素
Pop()彈棧
Push()入棧
Enumeration介面
Dictionary類
字典。關鍵字/數值方式存取資料,如果對映沒有此關鍵字,取回null。
Hashtable類
是Dictionary結構的具體實現。
面試題答案
Collection 和 Collections的區別。
Collections是個java.util下的類,它包含有各種有關集合操作的靜態方法。
Collection是個java.util下的介面,它是各種集合結構的父介面
List, Set, Map是否繼承自Collection介面? List,Set是 Map不是
ArrayList和Vector的區別。
一.同步性:Vector是執行緒安全的,也就是說是同步的,而ArrayList是執行緒序不安全的,不是同步的
二.資料增長:當需要增長時,Vector預設增長為原來一培,而ArrayList卻是原來的一半
HashMap和Hashtable的區別
一.歷史原因:Hashtable是基於陳舊的Dictionary類的,HashMap是Java 1.2引進的Map介面的一個實現
二.同步性:Hashtable是執行緒安全的,也就是說是同步的,而HashMap是執行緒序不安全的,不是同步的
三.值:只有HashMap可以讓你將空值作為一個表的條目的key或value
謝謝作者。
相關文章
- 淺談 Java集合Java
- Java基礎之淺談集合Java
- Python集合淺談Python
- 淺談框架框架
- 【集合框架】Java集合框架綜述框架Java
- Java 集合框架Java框架
- Java集合框架Java框架
- Java集合(1)一 集合框架Java框架
- 【Java集合原始碼剖析】Java集合框架Java原始碼框架
- 簡單就是美!淺談java各層框架。Java框架
- 集合框架-可變引數框架
- Java集合中的框架2Java框架
- java集合框架的講解Java框架
- Java集合框架系列教程一:集合框架簡介Java框架
- Java開發工程師進階篇——深入淺出Java集合框架Java工程師框架
- 淺談Spring框架Spring框架
- Java集合框架的最佳實踐Java框架
- JAVA集合框架 - Map介面Java框架
- Java集合框架學習Java框架
- Java集合框架隨筆Java框架
- Java集合框架(一)-ArrayListJava框架
- Java基礎-集合框架Java框架
- Java中 集合框架概述Java框架
- Java集合框架綜述Java框架
- Java 集合框架(二)—— ArrayListJava框架
- 淺談框架與模式的關係框架模式
- 淺談java中的反射Java反射
- 淺談Java的反射原理Java反射
- 淺談Java中的HashmapJavaHashMap
- 淺談 Fresco 框架結構框架
- 「譯」Java集合框架系列教程二:集合介面Java框架
- Java集合框架中的介面和類Java框架
- 淺談PHP-FPM引數PHP
- java集合框架--HashMap--putJava框架HashMap
- 【Java集合系列】---總體框架Java框架
- Java集合系列-總體框架Java框架
- Java 集合框架(三)—— LinkedListJava框架
- 淺談 Java 中 this 的使用(轉)Java