java 之 API-集合

這裏寫圖片描述

集合類概述

爲什麼出現集合類?
    面嚮對象語言對事物的體現都是以對象的形式,所以爲了方便對多個對象的操作,Java就提供了集合類。
數組和集合類同是容器,有何不同?
    數組雖然也可以存儲對象,但長度是固定的;集合長度是可變的。數組中可以存儲基本數據類型,集合只能存儲對象。
集合類的特點
    集合只用於存儲對象,集合長度是可變的,集合可以存儲不同類型的對象。

Collection接口概述

Collection接口概述
    Collection 層次結構中的根接口。Collection 表示一組對象,這些對象也稱爲 collection 的元素。一些 collection 允許有重複的元素,而另一些則不允許。一些 collection 是有序的,另一些則是無序的

Collection接口成員方法

boolean add(E e)
boolean remove(Object o)
void clear()
boolean contains(Object o)
boolean isEmpty()
int size()

Collection接口成員方法

boolean addAll(Collection c)
boolean removeAll(Collection c)
boolean containsAll(Collection c)
boolean retainAll(Collection c)

Collection接口成員方法

Object[] toArray()
    把集合轉成數組,可以實現集合的遍歷

Iterator iterator()
    迭代器,集合的專用遍歷方式

Iterator接口概述

Iterator接口概述
對 collection 進行迭代的迭代器
依賴於集合而存在

Iterator接口成員方法

boolean hasNext()
E next()

List接口概述

List接口概述
    有序的 collection(也稱爲序列)。此接口的用戶可以對列表中每個元素的插入位置進行精確地控制。用戶可以根據元素的整數索引(在列表中的位置)訪問元素,並搜索列表中的元素。
    與 set 不同,列表通常允許重複的元素。
List案例
    存儲字符串並遍歷
    存儲自定義對象並遍歷

List接口成員方法

void add(int index,E element)
E remove(int index)
E get(int index)
E set(int index,E element)
ListIterator listIterator()

ListIterator接口的成員方法

boolean hasPrevious()
E previous()

ConcurrentModificationException
現象
原因
解決方案

常見數據結構

棧
隊列
數組
鏈表
樹
哈希表

ArrayList類概述及使用

ArrayList類概述
    底層數據結構是數組,查詢快,增刪慢
    線程不安全,效率高
ArrayList案例
    存儲字符串並遍歷
    存儲自定義對象並遍歷

Vector類概述及使用

Vector類概述
    底層數據結構是數組,查詢快,增刪慢
    線程安全,效率低
Vector類特有功能
    public void addElement(E obj)
    public E elementAt(int index)
    public Enumeration elements()
Vector案例
    存儲字符串並遍歷
    存儲自定義對象並遍歷

LinkedList類概述及使用

LinkedList類概述
    底層數據結構是鏈表,查詢慢,增刪快
    線程不安全,效率高
LinkedList類特有功能
    public void addFirst(E e)及addLast(E e)
    public E getFirst()及getLast()
    public E removeFirst()及public E removeLast()
LinkedList案例
    存儲字符串並遍歷
    存儲自定義對象並遍歷

泛型概述及使用

JDK1.5以後出現的機制
泛型出現的原因
泛型出現的好處
泛型的書寫格式
把前面的集合代碼用泛型改進

泛型應用

泛型類
    把泛型定義在類上
    格式:public class 類名<泛型類型1,…>
    注意:泛型類型必須是引用類型
泛型方法
    把泛型定義在方法上
    格式:public <泛型類型> 返回類型 方法名(泛型類型 .)
泛型接口
    把泛型定義在接口上
    格式:public  interface 接口名<泛型類型1…>

泛型高級(通配符)

泛型通配符<?>
    任意類型,如果沒有明確,那麼就是Object以及任意的Java類了
? extends E
    向下限定,E及其子類
? super E
    向上限定,E及其父類

增強for概述及使用 

增強for概述
簡化數組和Collection集合的遍歷
格式:
    for(元素數據類型 變量 : 數組或者Collection集合) {
        使用變量即可,該變量就是元素
        }
好處:簡化遍歷
注意事項:增強for的目標要判斷是否爲null
把前面的集合代碼的遍歷用增強for改進

靜態導入概述及使用

靜態導入概述
    格式:import static 包名….類名.方法名;
    可以直接導入到方法的級別
注意事項
    方法必須是靜態的
    如果有多個同名的靜態方法,容易不知道使用誰?這個時候要使用,必須加前綴。由此可見,意義不大,所以一般不用,但是要能看懂

可變參數概述及使用

可變參數概述
定義方法的時候不知道該定義多少個參數
格式
    修飾符 返回值類型 方法名(數據類型…  變量名){}
    注意:
        這裏的變量其實是一個數組
        如果一個方法有可變參數,並且有多個參數,那麼,可變參數肯定是最後一個
Arrays工具類中的一個方法
    public static <T> List<T> asList(T... a)

Set接口概述

Set接口概述
    一個不包含重複元素的 collection。
Set案例
    存儲字符串並遍歷
    存儲自定義對象並遍歷

HashSet類概述

HashSet類概述
    不保證 set 的迭代順序
    特別是它不保證該順序恆久不變。
HashSet如何保證元素唯一性
    底層數據結構是哈希表(元素是鏈表的數組)
    哈希表依賴於哈希值存儲
    添加功能底層依賴兩個方法:
    int hashCode()
    boolean equals(Object obj)

LinkedHashSet類概述

LinkedHashSet類概述
    元素有序唯一
    由鏈表保證元素有序
    由哈希表保證元素唯一

TreeSet類概述

TreeSet類概述
    使用元素的自然順序對元素進行排序
    或者根據創建 set 時提供的 Comparator 進行排序
    具體取決於使用的構造方法。 
TreeSet是如何保證元素的排序和唯一性的
    底層數據結構是紅黑樹(紅黑樹是一種自平衡的二叉樹)

Collection集合總結

Collection
    List
        ArrayList
        Vector
        LinkedList
    Set
        HashSet
        TreeSet

Map接口概述

Map接口概述
    將鍵映射到值的對象
    一個映射不能包含重複的鍵
    每個鍵最多隻能映射到一個值
Map接口和Collection接口的不同
    Map是雙列的,Collection是單列的
    Map的鍵唯一,Collection的子體系Set是唯一的
    Map集合的數據結構值針對鍵有效,跟值無關
       Collection集合的數據結構是針對元素有效

Map接口成員方法

V put(K key,V value)
V remove(Object key)
void clear()
boolean containsKey(Object key)
boolean containsValue(Object value)
boolean isEmpty()
int size()

V get(Object key)
Set<K> keySet()
Collection<V> values()
Set<Map.Entry<K,V>> entrySet()

Map集合遍歷

方式1:根據鍵找值
    獲取所有鍵的集合
    遍歷鍵的集合,獲取到每一個鍵
    根據鍵找值
方式2:根據鍵值對對象找鍵和值
    獲取所有鍵值對對象的集合
    遍歷鍵值對對象的集合,獲取到每一個鍵值對對象
    根據鍵值對對象找鍵和值

HashMap類概述

HashMap類概述
    鍵是哈希表結構,可以保證鍵的唯一性
HashMap案例
    HashMap<String,String>
    HashMap<Integer,String>
    HashMap<String,Student>
    HashMap<Student,String>

LinkedHashMap類概述

Map 接口的哈希表和鏈接列表實現,具有可預知的迭代順序。

TreeMap類概述

TreeMap類概述
    鍵是紅黑樹結構,可以保證鍵的排序和唯一性
TreeMap案例
    HashMap<String,String>
    HashMap<Student,String>

Collections類概述和成員方法

Collections類概述
    針對集合操作 的工具類
Collections成員方法
    public static <T> void sort(List<T> list)
    public static <T> int binarySearch(List<?> list,T key)
    public static <T> T max(Collection<?> coll)
    public static void reverse(List<?> list)
    public static void shuffle(List<?> list)

Collections成員方法的使用

模擬鬥地主洗牌和發牌
模擬鬥地主洗牌和發牌
    對牌進行排序
    並同時使用Map,List,Set等集合,可以知道什麼時候使用哪種集合

集合總結

集合
    Collection
        List
        Set
    Map
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章