1. 程式人生 > >java基礎知識總結(二)--集合

java基礎知識總結(二)--集合

這裡寫圖片描述
一.集合
1.集合概述:由於我們使用的是面嚮物件語言,所以,我們要經常使用物件,而很多時候我們需要使用很多物件,而用陣列對物件進行儲存,長度是固定的,不適用於變化的資料.所以,java提供了一種容器,用於儲存物件,這種容器就叫做集合.
2.集合和陣列的區別:

(1)集合
a.集合長度可變
b.集合只能儲存引用資料型別
c.集合可以儲存多種資料型別
(2)陣列
a.陣列長度是固定的
b.陣列可以儲存基本資料型別和引用資料型別
c.陣列只能儲存一種資料型別

3.collection集合的體系結構
這裡寫圖片描述
4.迭代器

a.概念:按照某種方式重複的做事情,主要用於遍歷集合中的元素
b.迭代器定義為介面而不是類的原理:由於集合的資料結構不同,資料儲存的方式也就不同,取出的方式也不同.定義為具體的實現類是不合適的,使用的時候,通過內部類實現
c.常見問題:ConcurrentModificationException:併發修改異常
    原因:在迭代的時候給集合增加或刪除元素造成的
d.Iterator 和ListIterator的區別
    A.Iterator是ListIterator的父介面
    B.Iterator是Collection集合的公共的取出容器中元素的方式,對於List,Set都通用,ListIterator只能是List的方式
    C.ListIterator具備對遍歷的元素進行增刪改查的方法,不會出現ConcurrentModificationException:併發修改異常
e.for 迴圈遍歷和迭代器遍歷的區別
 A.最主要的區別就是remove方法,想要在迴圈的過程中刪除元素就要用迭代器,因為迭代器的remove方法不僅會刪除元素,還會維護一個標誌,用了記錄當前狀態是不是可刪除。而for迴圈腳標是變化的,刪除元素會報錯,因為list.size()大小發生變化了
     B.ArrayList裡面維護的是陣列,順序結構,所以用get方法獲取比較快,因而用for迴圈
         LinkedList裡面維護的是連結串列,鏈式結構,Iterator中的next()方法,採用的即是順序訪問的方法,因此用迭代器比較快

5.增強for

a.格式:
    for(物件的型別  變數名 : 物件名)
    {
        直接使用變數
    }
b.好處:方便陣列和集合的遍歷
c.注意事項:增強for是用來代替Iterator的,不要在遍歷的時候對集合進行修改

6.集合遍歷的方式

a.增強for
b.迭代器
c.List 中可以用普通for ,通過get()方法

7.泛型

a.概念:泛型是一種把明確資料型別的工作放在建立物件或呼叫方法的時候才明確的特殊的型別
b.好處:
    解決了黃線警告的問題
    將系統執行期間的問題提前到了編譯期
    優化了程式設計,不用強制轉換了
c.不足:泛型傳入的只能是引用資料型別
d.在類上定義 : public class Student<T>{}
e.在方法上定義: public <T> void method(T s){}
f.在介面上定義:public class Student implements Person<T>{}
g.在類上定義兩個泛型: public class MyArrayList<T, S >
h.泛型的使用:可以在繼承關係,實現關係,建立物件時使用
j.泛型高階萬用字元?  /  ? extends E  /  ? super E

8.Collection和Collections的區別

a.Collection是Collection集合的頂層介面,定義了Collection集合的共性方法
b.collections是一個類,定義了針對Collection集合操作的功能.有排序,查詢,反轉等

9.針對Collection集合我們到底使用誰

唯一嗎?
    是:Set
        排序嗎?
            是:TreeSet
            否:HashSet
    如果你知道是Set,但是不知道是哪個Set,就用HashSet。

    否:List
        要安全嗎?
            是:Vector
            否:ArrayList或者LinkedList
                查詢多:ArrayList
                增刪多:LinkedList
    如果你知道是List,但是不知道是哪個List,就用ArrayList。
有對應關係 ,用Map
如果你知道是Collection集合,但是不知道使用誰,就用ArrayList。

如果你知道用集合,就用ArrayList。   

10.TreeSet排序的兩種實現方式

A:自然排序(元素具備比較性)  TreeSet的無參構造,要求物件所屬的類實現Comparable介面。           
B:比較器排序(集合具備比較性)TreeSet的帶參構造,要求構造方法接收一個實現了Comparator介面的物件。

11.Map和Collection的區別?

    A:Map 儲存的是鍵值對形式的元素,鍵唯一,值可以重複。夫妻對
    B:Collection 儲存的是單獨出現的元素,子介面Set元素唯一,子介面List元素可重複

二.集合各類和介面中常用方法
1.Collection中常用的方法

a.boolean add(obj)  向集合中新增元素
b.boolean remove(obj)   刪除集合中的指定元素
c.boolean isEmpty() 判斷集合是否為空
d.boolean contains(obj) 判斷集合中是否存在指定元素
e.int size()    獲取集合中元素的個數
f.Iterator iterator()   遍歷

2.List中常用的成員方法

a.void add(int index,obj )  在指定位置新增元素
b.Object remove(int index)  刪除指定位置的元素
c.Object set (int index,obj)    把指定位置的元素改為指定的值,返回之前的值
d.Object get(int index) 獲取集合中指定位置的元素
e.int indexOf(obj)  返回指定元素在集合中第一次出現的索引
f.ListIterator listIterator()   列表迭代器
g.List subList(int fromIndex,int toIndex)   擷取集合

3.Vector類

a.void addElement(obj)  新增
b.Object elementAt(int index)   獲取元素
c.Enumeration elements()    獲取所有元素
d.int size()   獲取集合中元素的個數

4.LinkedList類

a.void addFirst(Object o) 在第一個索引位置新增
b.void addLast(Object o)
c.Objcet getFirst() 獲取第一個索引位置的元素
d.Objcet getLast()
e.Object removeFirst()  刪除第一個索引位置的元素
f.Object removeLast()

5.Collections類

a.void sort(List list)  排序
b.binarySearch(List list,obj)   二分查詢
c.reverse   反轉
d.max(Collection c)     最大值
e.shuffer(List list )   隨機置換