標籤:hashmap arraylist 集合 java 遍曆
------Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流! -------
系統學習集合
一:集合的體系
Collection(單列集合)
List(有序,可重複)
ArrayList
底層資料結構是數組,查詢快,增刪慢
線程不安全,效率高
Vector
底層資料結構是數組,查詢快,增刪慢
安全執行緒,效率低
LinkedList
底層資料結構是鏈表,查詢慢,增刪快
線程不安全,效率高
Set(無序,唯一)
HashSet
底層資料結構是雜湊表。
雜湊表依賴兩個方法:hashCode()和equals()來保證唯一。
執行順序:
首先判斷hashCode()值是否相同
是:繼續執行equals(),看其返回值
是true:說明元素重複,不添加
是false:就直接添加到集合
否:就直接添加到集合
最終:
通過快速鍵自動產生hashCode()和equals()即可
LinkedHashSet
底層資料結構由鏈表和雜湊表組成。
由鏈表保證元素有序。
由雜湊表保證元素唯一。
TreeSet
底層資料結構是紅/黑樹狀結構。(是一種自平衡的二叉樹)
如何保證元素唯一性呢?
根據比較的返回值是否是0來決定
如何保證元素的排序呢?
兩種方式
自然排序(元素具備比較性)
讓元素所屬的類實現Comparable介面
比較子排序(集合具備比較性)
讓集合接收一個Comparator的實作類別對象
Map(雙列集合)
A:Map集合的資料結構僅僅針對鍵有效,與值無關。
B:儲存的是鍵值對形式的元素,鍵唯一,值可重複。
HashMap
底層資料結構是雜湊表。線程不安全,效率高
雜湊表依賴兩個方法:hashCode()和equals()
執行順序:
首先判斷hashCode()值是否相同
是:繼續執行equals(),看其返回值
是true:說明元素重複,不添加
是false:就直接添加到集合
否:就直接添加到集合
最終:
自動產生hashCode()和equals()即可
LinkedHashMap
底層資料結構由鏈表和雜湊表組成。
由鏈表保證元素有序。
由雜湊表保證元素唯一。
Hashtable
底層資料結構是雜湊表。安全執行緒,效率低
雜湊表依賴兩個方法:hashCode()和equals()
執行順序:
首先判斷hashCode()值是否相同
是:繼續執行equals(),看其返回值
是true:說明元素重複,不添加
是false:就直接添加到集合
否:就直接添加到集合
最終:
自動產生hashCode()和equals()即可
TreeMap
底層資料結構是紅/黑樹狀結構。(是一種自平衡的二叉樹)
如何保證元素唯一性呢?
根據比較的返回值是否是0來決定
如何保證元素的排序呢?
兩種方式
自然排序(元素具備比較性)
讓元素所屬的類實現Comparable介面
比較子排序(集合具備比較性)
讓集合接收一個Comparator的實作類別對象
二:到底使用那種集合
看需求。
是否是鍵值對象形式:
是:Map
鍵是否需要排序:
是:TreeMap
否:HashMap
不知道,就使用HashMap。
否:Collection
元素是否唯一:
是:Set
元素是否需要排序:
是:TreeSet
否:HashSet
不知道,就使用HashSet
否:List
要安全嗎:
是:Vector(其實我們也不用它,後面我們講解了多線程以後,我在給你回顧用誰)
否:ArrayList或者LinkedList
增刪多:LinkedList
查詢多:ArrayList
不知道,就使用ArrayList
不知道,就使用ArrayList
所以我們使用最多的就是HashMap、HashSet、ArrayList集合
3:集合的常見方法及遍曆方式
Collection:
A:添加功能
boolean add(Object obj);添加一個元素
boolean addAll(Collection c);添加一個集合元素
B:刪除功能
void clear();移除所有元素
boolean remove(Object o);移除一個元素
boolean removeAll(Collection c);移除一個集合裡的所有元素
C:判斷功能
boolean contains(Object o);判斷集合中是否包含指定的元素
boolean containsAll(Collection c);判斷集合中是否包含指定的集合
boolean isEmpty();判斷集合是否為空白。
D:擷取功能
Iterator<E> iterator();迭代器,用來遍曆。
E:長度功能
int size();擷取元素的個數集合的長度
遍曆:
增強for
迭代器
|--List
除了具備Collections的功能外還有自己的特有功能
擷取功能
Object get(int index);擷取指定位置的元素
遍曆:
增強for
迭代器
普通for:size()和get()方法結合
|--Set
具備Collections的功能
遍曆:
增強for
迭代器
Map:
A:添加功能
V put(K key,V value):添加元素。
如果鍵是第一次儲存,就直接儲存元素,返回null
如果鍵不是第一次儲存,就用值把以前的值替換掉,返回以前的值。
B:刪除功能
void clear();移除所有的鍵值對元素,這個方法不常用。
V remove(Object key):根據鍵刪除對應元素,並把對應的值返回。
C:判斷功能
boolean containsKey(Object key):判斷集合是否包含指定的鍵。
boolean containsValue(Object value);判斷集合是否包含指定的值
boolean isEmpty();判斷集合是否為空白。
D:擷取功能
Set<Map.Entry<K,V>> entryset();
V get(Object key);根據鍵擷取值
Set<K> keySet();擷取集合中所有的鍵的集合
Collection<V> value();擷取集合中所有值的集合。
E:長度功能
int size();返回集合中的鍵值對的個數。
遍曆:
根據鍵找值(相當於根據丈夫找妻子)
根據鍵值對對象分別找鍵和值(相當於根據結婚證找丈夫和妻子)
黑馬程式員-----java基礎-----集合(把這些看完你也就學會集合了)