java基礎總結(四)

集合框架:★★★★★,
用於存儲數據的容器。
特點:
1:對象封裝數據,對象多了也需要存儲。集合用於存儲對象。
2:對象的個數確定可以使用數組,但是不確定怎麼辦?可以用集合。因爲集合是可變長度的。

集合和數組的區別:
1:數組是固定長度的;集合可變長度的。
2:數組可以存儲基本數據類型,也可以存儲引用數據類型;集合只能存儲引用數據類型。
3:數組存儲的元素必須是同一個數據類型;集合存儲的對象可以是不同數據類型。

數據結構:就是容器中存儲數據的方式。

對於集合容器,有很多種。因爲每一個容器的自身特點不同,其實原理在於每個容器的內部數據結構不同。
集合容器在不斷向上抽取過程中。出現了集合體系。
在使用一個體系時,原則:參閱頂層內容。建立底層對象。


–< java.util >–
Collection接口:
Collection:
|–List:有序(元素存入集合的順序和取出的順序一致),元素都有索引。元素可以重複。
|–Set:無序(存入和取出順序有可能不一致),不可以存儲重複元素。必須保證元素唯一性。

1,添加:
add(object):添加一個元素
addAll(Collection) :添加一個集合中的所有元素。
2,刪除:
clear():將集合中的元素全刪除,清空集合。
remove(obj) :刪除集合中指定的對象。注意:刪除成功,集合的長度會改變。
removeAll(collection) :刪除部分元素。部分元素和傳入Collection一致。
3,判斷:
boolean contains(obj) :集合中是否包含指定元素 。
boolean containsAll(Collection) :集合中是否包含指定的多個元素。
boolean isEmpty():集合中是否有元素。
4,獲取:
int size():集合中有幾個元素。
5,取交集:
boolean retainAll(Collection) :對當前集合中保留和指定集合中的相同的元素。如果兩個集合元素相同,返回flase;如果retainAll修改了當前集合,返回true。
6,獲取集合中所有元素:
Iterator iterator():迭代器
7,將集合變成數組:
toArray();

–< java.util >–
Iterator接口:
迭代器:是一個接口。作用:用於取集合中的元素。
boolean hasNext() 如果仍有元素可以迭代,則返回 true。
E next() 返回迭代的下一個元素。
void remove() 從迭代器指向的 collection 中移除迭代器返回的最後一個元素(可選操作)。

每一個集合都有自己的數據結構,都有特定的取出自己內部元素的方式。爲了便於操作所有的容器,取出元素。將容器內部的取出方式按照一個統一的規則向外提供,這個規則就是Iterator接口。
也就說,只要通過該接口就可以取出Collection集合中的元素,至於每一個具體的容器依據自己的數據結構,如何實現的具體取出細節,這個不用關心,這樣就降低了取出元素和具體集合的耦合性。

Iterator it = coll.iterator();//獲取容器中的迭代器對象,至於這個對象是是什麼不重要。這對象肯定符合一個規則Iterator接口。

public static void main(String[] args) {
Collection coll = new ArrayList();
coll.add(“abc0”);
coll.add(“abc1”);
coll.add(“abc2”);
//————–方式1———————-
Iterator it = coll.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
//—————方式2用此種———————-
for(Iterator it = coll.iterator();it.hasNext(); ){
System.out.println(it.next());
}
}

–< java.util >–
List接口:
List本身是Collection接口的子接口,具備了Collection的所有方法。現在學習List體系特有的共性方法,查閱方法發現List的特有方法都有索引,這是該集合最大的特點。

List:有序(元素存入集合的順序和取出的順序一致),元素都有索引。元素可以重複。
|–ArrayList:底層的數據結構是數組,線程不同步,ArrayList替代了Vector,查詢元素的速度非常快。
|–LinkedList:底層的數據結構是鏈表,線程不同步,增刪元素的速度非常快。
|–Vector:底層的數據結構就是數組,線程同步的,Vector無論查詢和增刪都巨慢。

1,添加:
add(index,element) :在指定的索引位插入元素。
addAll(index,collection) :在指定的索引位插入一堆元素。
2,刪除:
remove(index) :刪除指定索引位的元素。 返回被刪的元素。
3,獲取:
Object get(index) :通過索引獲取指定元素。
int indexOf(obj) :獲取指定元素第一次出現的索引位,如果該元素不存在返回-1;
所以,通過-1,可以判斷一個元素是否存在。
int lastIndexOf(Object o) :反向索引指定元素的位置。
List subList(start,end) :獲取子列表。
4,修改:
Object set(index,element) :對指定索引位進行元素的修改。
5,獲取所有元素:
ListIterator listIterator():list集合特有的迭代器。

List集合支持對元素的增、刪、改、查。

List集合因爲角標有了自己的獲取元素的方式: 遍歷。
for(int x=0; x

}

泛型中的通配符:可以解決當具體類型不確定的時候,這個通配符就是 ? ;當操作類型時,不需要使用類型的具體功能時,只使用Object類中的功能。那麼可以用 ? 通配符來表未知類型。

泛型限定:
上限:?extends E:可以接收E類型或者E的子類型對象。
下限:?super E:可以接收E類型或者E的父類型對象。

上限什麼時候用:往集合中添加元素時,既可以添加E類型對象,又可以添加E的子類型對象。爲什麼?因爲取的時候,E類型既可以接收E類對象,又可以接收E的子類型對象。

下限什麼時候用:當從集合中獲取元素進行操作的時候,可以用當前元素的類型接收,也可以用當前元素的父類型接收。

泛型的細節:
1)、泛型到底代表什麼類型取決於調用者傳入的類型,如果沒傳,默認是Object類型;
2)、使用帶泛型的類創建對象時,等式兩邊指定的泛型必須一致;
原因:編譯器檢查對象調用方法時只看變量,然而程序運行期間調用方法時就要考慮對象具體類型了;
3)、等式兩邊可以在任意一邊使用泛型,在另一邊不使用(考慮向後兼容);
ArrayList al = new ArrayList(); //錯
//要保證左右兩邊的泛型具體類型一致就可以了,這樣不容易出錯。
ArrayList

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章