天天看點

黑馬程式員——集合架構(二)

---------------------- <a href="http://edu.csdn.net/heima" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="blank">android教育訓練</a>、<a href="http://edu.csdn.net/heima" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="blank">java教育訓練</a>、期待與您交流! ----------------------

泛型

在jdk1.4版本之前,定義容器可以存儲任意類型的對象,但是取出時,如果使用了具體元素的方法,需要向下轉型的動作。因為元素類型的不一緻,會導緻運作時, ClassCastException 類型轉換異常。問題原因是,在定義集合時,并沒有明确集合中的元素的具體類型。借鑒數組的定義方式就可以避免這個問題。是以jdk1.5版本以後,出現了一個解決機制,就在定義容器時,直接明确容器的元素類型。ArrayList<String> a = new ArrayList<String>();

這是就是泛型的表現,通過<>格式來使用,其實泛型就是使用到了帶有<>的類和接口時,傳遞需要操作的對象的類型即可,其實就傳遞類型參數。

什麼時候寫泛型

最簡單一種展現,隻要使用了帶有<>的類的接口,就是指定具體對象類型。

泛型的好處:

1、将運作時出現的 ClassCastException 問題,在編譯時期給解決了,運作就安全了

2、避免了強制轉換的麻煩了。

是以泛型就是jdk1.5後出現了一個安全機制。

泛型是編譯時期的安全機制

泛型的擦除:

編譯時,通過泛型機制,編譯器多了對元素類型進行檢查的步驟。如果檢查通過,産生的class檔案是不帶有的泛型的:泛型的擦除。

泛型的補償:

在對元素存儲的時候,可以完成類型的判斷。可是在對元素取出的時候,怎麼用指定的類型來接收呢?jvm在運作時,會擷取元素的類型,并用該類型對元素進行轉換即可。

泛型在表現上的特點:

泛型類:

将泛型定義在自定義類上,這個類稱為泛型類。

是以泛型替代了Object的同時在編譯時期更安全,省去了強轉的麻煩。

什麼時候使用泛型類呢?

當類中的要操作的引用資料類型不确定的時候,以前使用的共性類型Object,現在可以使用泛型來解決。

泛型方法:

類中的方法操作的類型不确定時,可以将泛型定義在方法上。

什麼時候使用泛型方法?

當方法操作的引用資料類型不确定的時候,就使用泛型方法。

*.如果方法是靜态的,是無法通路類上定義的泛型的,如果該方法還需要泛型,必須将泛型定義在方法上。

泛型通配符:

當列印集合中的元素的類型是不确定的,無法明确,可以使用泛型中的通配符來完成,該通配符用 ?來表示。

如果要對操作的類型進行限定,隻操作一部分類型時,可以使用泛型的進階功能。

泛型的限定:

? extends E 可以接收E類型和E的子類型。

?super E 可以接收E類型或者E的父類型。

什麼時候使用這種進階功能?

一般在存儲具體引用類型時,使用這種情況,因為存儲E類型或者E類型的子類型,在取出的時候都可以使用E類型操作操作這些元素。這時可以保證類型是安全的。

下限什麼時候用?

從集合中取出對象進行操作時,就可以使用下限。比如:比較器,無論集合中的元素對象的類型是什麼,隻要比較器的指定類型可以接收這些對象完成比較,就可以了。是以比較器的類型,可以是集合中的目前元素或者是元素的父類型。

定義泛型時,左右兩邊一定要一緻。

如果不一緻。。。。

簡單了解:

?:Object,隻能使用Object的方法。

?extends E

?super E

把它們當成E。

集合架構的工具類

Collections

|--

Arrays

JDK1.5版本的特點:

|--foreach語句(增強for循環)

|--格式

|--與傳統for循環的差別

|--與疊代器的差別

|--使用注意

|--可變參數(T... t)

其他對象

System類:

Runtime類:

Math類:

Collections類:

負責給集合提供工具方法的工具類。

而且該工具類中的方法都是靜态的。

了解一下常用的一些工具方法。

Arrays類:

asList();如果數組中存儲的都是對象,轉成集合時,會将數組中的元素作為集合中的元素存在;如果數組中存儲的都是基本資料類型值,轉成集合時,該數組會作為集合中的元素存在。

foreach語句

增強for循環:

for(資料類型 變量名 : 數組或Collection集合)

{

}

1.傳統for循環和增強for的差別?

傳統for循環可以通過增量完成循環的動作,讓指定代碼多次運作。

增強for循環,周遊必須有目标,而且目标隻能是數組和Collection單例集合。

2.增強for循環和疊代器的差別?

通常增強for循環隻用于周遊目标。在周遊過程中少有對元素的操作。

而疊代器在周遊元素的過程中,可以對周遊的元素進行操作比如remove。

建議周遊數組可以是增強for循環,也可以傳統for循環。

隻為周遊可以增強for循環簡化書寫,一旦要對元素有其他操作時,要使用傳統for循環。

3.用增強for循環可以周遊map集合嗎?

不可以,但是可以将Map集合轉成Set集合。

Date 類,日期:

Date date = new Date();

sop(date);

日期對象和毫秒值之間的轉換:

毫秒-->日期對象

使用 構造函數完成  new Date(long);

還可以使用setTime(long);

為什麼要做這樣的轉換呢

将一個long型的值變成日期對象,就可以使用日期對象的方法擷取其中

的具體的日期和時間。這樣操作起來簡單便捷

日期-->毫秒值

使用Date對象的getTime方法

什麼時候用呢?當要對日期進行運算時,最好是将日期

轉成基本資料類型long型值,就可以進行基本運算了。

将日期對象轉成指定格式的字元串

使用的Dateformat類中的format方法

--------------------- <a href="http://edu.csdn.net/heima" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="blank">android教育訓練</a>、<a href="http://edu.csdn.net/heima" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="blank">java教育訓練</a>、期待與您交流! ----------------------

繼續閱讀