1. 程式人生 > >Collection單列集合

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 .