Collection單列集合
**Collectoin單列集合:**
Collection方法:
● boolean add(Object e) 把給定的物件新增到當前集合中
● void clear() 清空集合中所有的元素
● boolean remove(Object o) 把給定的物件在當前集合中刪除
● boolean contains(Object o) 判斷當前集合中是否包含給定的物件
● boolean isEmpty() 判斷當前集合是否為空
● Iterator iterator() 迭代器,用來遍歷集合中的元素的
● int size() 返回集合中元素的個數
● Object[] toArray() 把集合中的元素,儲存到陣列中
● Iterator : 迭代器
● Object next()返回迭代的下一個元素
● boolean hasNext()如果仍有元素可以迭代,則返回 true。
**List集合:**
1.特點:
①它是一個有序的集合(元素存與取順序相同)
②它可以儲存重複的元素
③有索引
2.List集合中的特有方法
void add(int index, Object element) 將指定的元素,新增到指定位置上
Object get(int index)返回集合中指定位置的元素。
Object remove(int index) 移除列表中指定位置的元素, 返回的是被移除的元素
Object set(int index, Object element)用指定元素替換集合中指定位置的元素
3.List的子類
①ArrayList:
底層資料結構是陣列,查詢快,增刪慢
執行緒不安全,效率高
②LinkedList:
底層資料結構是連結串列,查詢慢,增刪快
執行緒不安全,效率高
**Set集合**
1.特點:
①它不能儲存重複的元素
②沒有索引
③HashsSet無序的集合(元素存與取的順序可能不同)
LinkedHashsSet有序的集合(元素存與取的順序相同)
2.Set子類
①HashSet:
元素唯一不能重複
底層結構是 雜湊表結構
元素的存與取的順序不能保證一致
②LinkedHashSet:
元素唯一不能重複
底層結構是 雜湊表結構 + 連結串列結構
元素的存與取的順序一致
3.Set集合儲存元素不重複的原理:
hashCode值一樣 , 元素內容不一樣 , 還是會輸出 .
hashCode值一樣 , 元素內容一樣 , 不會輸出 .
儲存的元素必須重寫hashCode和equals 方法,來保證元素唯一
String,Integer,Double...hashCode和equals方法
沒有索引的遍歷方式:
1.迭代器遍歷:
ArrayList<String> list = new ArrayList<>(); //建立集合
Iterator<String> it = list.iterator(); //獲取迭代器物件.
while(it.hasNext()){ // 判斷是否仍有元素可以迭代
String str = it.next(); // 取出下一代元素.
System.out.println(str);
}
2.增強for迴圈
格式:建立一個數組或者集合.
for(資料型別 變數 : 陣列 / Collection集合) {
// 輸出變數.
}
hashCode和equals方法的兩個問題:
兩個物件 Person p1 = new Person(); p2= new Person();
問題1:
如果兩個物件的雜湊值相同 p1.hashCode() == p2.hashCode()
兩個物件的equals一定會返回true嗎? p1.equals(p2)一定是true嗎
正確答案:不一定
問題2:如果兩個物件的equals方法返回true, p1.equals(p2)=true
兩個物件的雜湊值一定相同嗎?
正確答案:一定(常規協定) 該協定宣告相等物件必須具有相等的雜湊碼。
注意:
迭代器和增強for只能遍歷,不能刪除或者修改元素.否則就會出現併發修改異常:ConcurrentModificationException .