集合
集合和數組的區別
Java的集合體系
-
單列集合(Collection)
List:
ArraryList
Set:
HashSet
-
雙列集合(Map: Key,value)
Map:
HashMap
List集合
特點:可重復、有序(元素的存取順序一致)
注意:List是接口,所以可以通過創建其子類ArrayList對象來完成該接口的實例化 List list = new ArrayList();
List接口中的成員方法:
-
public boolean add(E e);//將數據添加到集合的末尾,這里的E是泛型的意思,可以先理解為Object類型
-
public E get(int index);//根據索引,索取其對應的元素
-
public int size();//獲取集合長度
使用集合的步驟:
-
創建集合對象
-
創建元素對象
-
將元素對象添加到集合對象中
-
遍歷集合
增強for循環和迭代器
增強for格式
for(元素的數據類型 變量名:要遍歷的數組或者集合對象){
注意:增強for的底層依賴的是迭代器(Iterator)(增強for就是迭代器的簡寫形式)
對過程的重復,稱為迭代。
迭代器是遍歷Collection集合的通用方式。
迭代器(Iterator)的常用方法
注意:列表迭代器是List體系獨有的遍歷方式,可以在對集合遍歷的同時進行添加、刪除等操作,但是必須通過調用列表迭代器的方法來實現
總結:
1. 普通的迭代器在遍歷集合的同時不能添加或者刪除元素,否則會報:并發修改異常
2.列表迭代器在遍歷集合的同時可以修改集合中的元素(添加、刪除等),必須使用列表迭代器中的方法
泛型
定義:即泛指任意類型,又叫參數化類型(ParameterizedType),對具體類型的使用起到輔助作用,類似于方法的參數
集合類泛型的解釋:表示該集合中存放指定類型的元素
泛型的好處:類型安全、避免了類型的轉換。泛型一般只和集合類相結合使用。
Collections工具類
(針對集合進行操作的工具類)
成員方法:
-
sort(List<T>):根據元素的自然順序,將指定列表按升序排列
-
max(Collection<T>):返回集合的最大元素
-
reverse(List<T>):反轉List集合元素
-
shuffle(List<T>):使用默認的隨機源隨機置換指定的列表
Set集合的特點和英語
Set集合的特點:不可重復、無序
應用:Set<T> set = new HashSet<>();
案例:向Set集合中添加五個元素,并遍歷打印
分析:A. 向集合中添加元素的方法為:add();
B. 遍歷集合的方式:迭代器
步驟:1. 創建集合對象:Set<Student> set = new HashSet<>();
2. 分別創建五個Student對象
3. 使用add方法將Student對象添加到集合中
4. 使用迭代器遍歷集合并打印,注意添加順序和打印順序是否相同
注意:因為Set集合保證元素的唯一性 依賴equals()和hashCode()兩個方法。如果沒有在自定義類中重寫這兩個方法,則默認調用的是Object類中的這兩個方法,而Object類中的equals()方法默認比較的是地址值是否相同。
Map集合的特點和應用
Map集合的特點
-
雙列集合,元素由鍵值對(Entry)構成
key -- value
應用:Map<T1,T2> map = new HashMap<>();
成員方法
-
V put(K key, V value): 添加元素(鍵值對的形式),元素第一次添加,返回null,重復添加,會用新值覆蓋舊值,并返回舊值
-
V get(Object key): 根據鍵獲取其對應的值
-
Set<K> keySet(): 獲取所有鍵的集合
案例:向Map集合中添加三個元素,并遍歷打印
分析:A.向map集合中添加元素的方法為:put()
B.遍歷集合的方式:
獲取所有的key:keySet()
遍歷keySet,通過key獲取value:get()
C.遍歷keySet的方法:iterator()
步驟:
1.創建集合對象:Map<Integer,Student> map = new HashMap<>();
2.分別創建三個Student對象
3.使用put方法將Student對象添加到集合中
4.獲取所有的key,并使用迭代器遍歷
5.通過key分別獲取對應的value并打印