1.1 集合知識回顧
集合類的特色:提供一種存儲空間可變的存儲模式,存儲的數據容量能夠隨時發生改變前端
1.2集合類體系結構程序員
集合
--Collection(單列)
----List(可重複)
------ArrayList
------LinkedList
----Set(不可重複)
------HashSet
------TreeSet
--Map(雙列)
----HashMap後端
Collection集合概述和使用
Collection集合概述:
是單例集合的頂層接口,它表示一組對象,這些對象也稱爲Collection集合的元素
JDK不提供此接口的任何直接實現,它提供更具體的子接口(如Set何List)實現數組
建立Collection集合的對象
多態的方式
具體的實現類ArrayList數據結構
Collection集合經常使用方法
boolean add(E e) 添加元素
boolean remove(Object o) 從集合中移除指定元素
void clear() 清空集合元素
boolean contains(Object o) 判斷集合中是否存在指定的元素
boolean isEmpty() 判斷集合是否爲空
int size() 集合的長度,也就是集合中元素的個數併發
Collection集合的遍歷
Iterator:迭代器,集合的專用遍歷方式
Iterator<E> iterator():返回此集合中元素的迭代器,經過結合的iterator()方法獲得
迭代器是經過結合的iterator()方法獲得的,因此咱們說它是依賴於集合而存在的ide
Iterator中的經常使用方法
E next():返回迭代中的下一個元素
boolean hasNext():若是迭代具備更多元素,則返回true優化
List集合概述和特色
List集合概述
有序集合(也稱爲序列),用戶能夠精準控制列表中每一個元素的插入位置,用戶也能夠經過索引訪問元素,並搜索索引
列表中的元素
與Set集合不一樣,列表一般運行重複的元素對象
List集合特色
有序:存儲和取出的元素順序一致
可重複:存儲的元素能夠重複排序
List集合特有方法
void add(int index,E element) 在此集合中的指定位置插入指定的元素
E remove(int index) 刪除指定索引處的元素,返回被刪除的元素
E set(int index,E element) 修改指定位置的元素,返回被修改的元素
E get(int index) 返回指定索引處的元素
併發修改異常
ConcurrentModificationException
產生緣由:迭代器遍歷的過程當中,經過集合對象修改了集合中元素的長度,形成了迭代器獲取元素中判斷
預期修改值和實際修改值不一致
解決方案
用for循環遍歷,而後用集合對象作對應的操做便可
ListIterator
ListIterator:列表迭代器
經過List集合的listIterator()方法獲得,因此說他是List集合特有的迭代器
用於程序員沿任一方向遍歷列表的列表迭代器,在迭代期間修改列表,並獲取列表中迭代器的當前位置
ListIterator中的經常使用方法
E next() 返回迭代中的下一個元素
boolean hasNext() 若是迭代具備更多元素,則返回ture
E pervious() 返回列表中的上一個元素
boolean hasPrevious() 若是此列表迭代器在相反方向遍歷列表時具備更多元素,則返回ture
void add(E e) 將指定元素插入列表
加強for循環
加強for:簡化數組和Collection集合的遍歷
實現Iterable接口的類容許其對象成爲加強型for語句的目標
它是JDK5以後出現的,其內部原理是一個iterator迭代器
格式:
for(元素數據類型 變量名:數組或者Collection集合){ //在此集合變量,該變量就是元素 }
常見數據結構
常見數據結構之棧
數據進入棧模式的過程稱爲:壓/進棧
數據離開棧模式的過程稱爲:彈/出棧
棧是一種數據先進後出的模型
常見數據結構之隊列
數據從後端進入隊列模型的過程稱爲:入隊列
數據從前端離開隊列模型的過程稱爲:出隊列
隊列是一種數據先進先出的模型
常見數據結構之數組
查詢數據經過索引定位,查詢任意數據好事相同,查詢效率高
刪除數據時,要將原始數據刪除,同時後面每一個數據前移,刪除效率低
添加數據時,添加位置後的每一個數據後移,再添加元素,添加效率極低
數組是一種查詢快,增刪慢的模型
常見數據結構之鏈表
鏈表是一種增刪快的模式(對比數組)
鏈表是一種查詢慢的模式(對比數組)
List集合子類特色
List集合常見子類:ArrayList、LinkedList
ArrayList:底層數據結構是數組,查詢快,增刪慢
LinkedList:底層數據結構是鏈表,查詢慢,增刪快
LinkedList集合的特有功能
public void addFirst(E e) 在該列表開頭插入特色的元素
public void addLast(E e) 將指定的元素追加到此列表的末尾
public E getFirst(E e) 返回此列表的第一個元素
public E getLast(E e) 返回此列表的最後一個元素
public E addFirst(E e) 今後列表中刪除並返回第一個元素
public E addLast(E e) 今後列表中刪除並返回最後一個元素
Set
Set集合概述和特色
Set集合的特色
不包含重複元素的集合
沒有帶索引的方法,因此不能使用普通for循環遍歷
哈希值
哈希值:是JDK根據對象的地址或字符串或者數字計算出來的int類型的數值
Object類中有一個方法能夠獲取對象的哈希值
public int hashCode():返回對象的哈希碼值
對象的哈希值特色
同一個對象屢次調用hashCode()方法返回的哈希值是相同的
默認狀況下,不一樣對象的哈希值是不一樣的。而重寫hashCode()方法,能夠實現讓不一樣對象的哈希值相同
HashSet集合概述和特色
HashSet集合特色
底層數據結構是哈希表
對集合的迭代順序不做保證,也就是說不保證存儲和取出的元素順序一致
沒有帶索引的方法,因此不能使用普通的for循環遍歷
因爲是Set集合,因此是不包含重複的集合
HashSet集合存儲元素
要保證元素惟一性,須要從新hashCode()和equals()
常見數據結構之哈希表
哈希表
JDK8以前,底層採用數組+鏈表實現,能夠說是一個元素爲鏈表的數組
JDK8以後,在長度比較長的時候,底層實現了優化
LinkedHashSet集合概述和特色
LinkedHashSet特色
哈希表和鏈表實現的Set接口,具備可預測的迭代次序
由鏈表保證元素的有些,也就是說元素的存儲和取出順序是一致的
有哈希表保證元素惟一,也就是說沒用重複的元素
TreeSet集合概述和特色
TreeSet集合特色
元素有序,這裏的順序不是指存儲和取出的順序,而是按照必定的規則進行排序,具體排序方式取決於構造方法
TreeSet():根據其元素的天然排序進行排序
TreeSet(Comparator):根據指定的比較器進行排序
沒有帶索引的方法,因此不能使用普通for循環遍歷
因爲是Set集合,因此不包含重複的集合
天然排序Comparable的使用
就是讓元素所屬的類實現Comparable接口,從新comparaTo(T o)方法
重寫方法時,必定要注意排序規則要求的主要條件和次要條件來寫
比較器排序Comparator的使用
用TreeSet集合存儲自定義對象,帶參構造方法使用的是比較器排序的元素進行排序的
比較器排序,就是讓集合構造方法接收Comparator的實現類對象,重寫compareTo(T o1,T o2)方法
重寫方法時,必定要注意排序規則要求的主要條件和次要條件來寫
重寫的compareTo方法中返回0:新元素不會添加進來返回1:會升序排列返回-1:會降序排列