集合
*集合類的特點:提供一種存儲空間可變的存儲模式,存儲的數據容量可以隨時發生改變
*和數組的區別:數組是存儲同種數據類型、長度在定義后便不可變。
集合分為單列集合(Collection)和雙列集合(Map)
*Collection集合的概述:是單列集合的頂層接口,它表示一組對象,這些對象也稱為Collection的元素;JDK不提供此接口的任何直接實現,它提供更具體的子接口
(如Set、List)實現
*Collection常用的方法:添加元素boolean add()、移除boolean remove()、清空void clear()判斷集合是否存在某個元素boolean contains()、判斷集合是否為空boolean sEmpty()、獲取集合的長度int size()。
*Collection集合的遍歷(迭代器)
**迭代器的介紹:是集合的專用遍歷方式,通過集合的iterator iterator()方法得到。
**迭代器的方法:hasNext()方法判斷迭代中是否還有元素。如果有則調用next()方法返 下一個元素。值得一提的是增強for循環本質就是一個迭代器。
**並發修改異常:迭代遍歷過程中,通過集合對象修改集合中的元素比如增刪改查等操作,造成了迭代器獲取元素中判斷預期修改值和實際修改值不一致。
**解決方案:用for循環替代迭代器進行遍歷。可以簡單理解為迭代器在執行循環前獲得一個數據值,在執行到此
Collection集合按照不同的特點可分為兩類子集合List和Set
*List集合
**List集合的特點:有序(元素的存儲順序一致)、有索引、可重復。
**List集合的常用方法:void add()、remove()、set()、get()。都是基於索引進行的增刪改查。
**列表迭代器:List集合的特有遍歷,通過listIterator()方法得到。主要用途是可以沿着任一方向進行遍歷,逆向方法hasPrevious(),Previous()。值得注意的是列表迭代器在迭代期間修改列表,返回迭代器的當前位置,所以在進行逆向遍歷前先進行正向遍歷。
**List集合的兩個實現類:
***ArrayList:底層是數組,查詢快,增刪慢,線程不同步,效率高。
***LinkedList:底層是鏈表,增刪快,查詢慢,線程不同步,效率高。特有方法xxfirst()可以獲取(刪除,得到)列表的一個元素,XXLast()同理。
*Set集合
**Set集合的特點:無序,無索引(所以沒有普通for循環),唯一(不可重復)
**哈希值
***哈希值的概念:是JDK根據對象的地址或者字符串或者數字算出來的int類型的數值。
***如何獲取哈希值:通過object類中的hashcode():返回對象的哈希值;
***哈希值的特點:1、同一個對象調用hashCode()方法返回的哈希值是相同的;2、不同的對象可以通過重寫hashCode()方法得到相同的哈希值。
**Set集合的三個實現類:
***HashSet:底層是哈希表,無序,無索引(不能使用普通for),唯一。保證為唯一性的原理如下圖:
***LinkedHashSet:底層是哈希表和鏈表,有序,無索引,唯一。
***TreeSet:底層是二叉樹,有序(指按照一定規則排序),無索引,唯一。
****自然排序:實現compareable接口,復寫compareTo方法,當主要條件相等時要比較次要元素,保證唯一性的語句是compareTo方法return0
****比較器排序:當元素不具備比較性,或者具備的比較性不符合需求,那么就讓集合自身具備比較性,定義一個類實現Compare接口,重寫compare()方法。