標籤:
泛型
一、常見資料結構:棧,隊列,鏈表,數組,樹,圖,堆……
棧:先進後出--壓棧、彈棧
隊列:先進先出
數組:儲存多個同一種元素,元素有編號【數組插入/刪除資料】
查詢快,增刪慢
鏈表:把一些結點通過鏈子連結起來的資料結構。
結點:由地址(指標)域和數範圍組成
增刪快,查詢慢
二、List三個子類特點
安全執行緒(同步)【效率降低】:
ArrayList類:底層資料結構是數組,查詢快,增刪慢,不安全
Vector:底層資料結構是數組,查詢快,增刪慢
安全執行緒,效率低
LinkedList:底層資料結構是鏈表,查詢慢,增刪快;
線程不安全,效率高
三、Vector特有功能
public void addElement(Object obj)---add
public Object elementAt(int index)---get
public Enumeration elements()----Iterator[hasNext next]
public int size()
四、LinkedList特有功能
添加
void addFirst(E e)
void addLast(E e)
擷取
Object getFirst()
Object getLast()
刪除
Object removeFirst()
Object removeLast()
【類比題】通過LinkedList類比棧結構---封裝
要類比的對象特點
五、泛型
任意的類型,是一種把明確資料類型的工作放在了建立對象或者調用方法時候進行的特殊類型。
模仿數組解決
泛型特點:
A:解決黃色警告線問題;
B:把運行期間的類型轉換異常提前到編譯期間;
C:最佳化程式設計
用於限定儲存資料類型一致問題,資料類型後面
六、增強for迴圈
格式
作用
增強for和迭代器一般只選一種,增強for是來替代迭代器的
注意:增強for是用來替代迭代器的,不能用集合對象對集合對象進行修改
泛型類:
把泛型定義在類上。
泛型方法:
泛型定義在方法上
泛型介面
執行個體:String泛型中追加int型資料
Day16總結
1:常見的資料結構
(1)提升等級:資料結構+演算法+UML+設計模式
(2)棧,隊列,數組,鏈表
棧:先進後出
隊列:先進先出
數組:查詢快,增刪慢
鏈表:查詢慢,增刪快
2:List的三個兒子
(1)List的三個兒子特點:
List
|--ArrayList
底層資料結構是數組,查詢快,增刪慢
線程不安全,效率高
|--Vector
底層資料結構是數組,查詢快,增刪慢
安全執行緒,效率低
|--LinkedList
底層資料結構是鏈表,查詢慢,增刪快
線程不安全,效率高
(2)根據需求使用具體對象:
是否要安全:
是:Vector
否:ArrayList,LinkedList
查詢多:ArrayList
增刪多:LinkedList
不清楚時,用ArrayList。
(3)ArrayList
重寫equqls三個步驟
1. 判斷是否為同一個對象
2. 判斷是否為該類的對象
3. 向下轉型,然後根據需求比較成員變數
(4)Vector C++中依舊在用 STL
有自己的特殊功能。
但是不用,被新功能給替代了。
(5)LinkedList(儲存字串和自訂對象)
有自己的特殊功能。可以很方便的操作頭和尾。
(6)案例:(今天作業之一)
A:ArrayList儲存字串並去除重複值
B:ArrayList儲存自訂對象並去除重複值
需求:我們認為同姓名和同年齡的人即為同一個人。
C:用LinkedList類比棧資料結構
3:泛型
(1)泛型是一種把明確類型的工作放在了建立對象或者調用方法時候才去明確的特殊的類型。
(2)格式:
<資料類型>
(3)好處:
A:解決了黃色警告線問題
B:把運行期間的轉換異常給提前到了編譯期間
C:最佳化了程式設計,不需要做強制類型轉換了
(4)泛型的前世今生
A:泛型類
B:泛型方法
C:泛型介面
(5)泛型的使用:
看API中的類或者介面,其後是否跟有<>,如果有,就是泛型的應用。
一般在集合中用。
4:增強for迴圈
(1)格式:
for(數組或者Collection集合的元素類型 變數 : 數組或者Collection集合的對象)
{
直接使用變數即可。
}
(2)好處:
方便了數組和Collection集合的遍曆。
(3)注意(注意):
A:增強for是用來替代迭代器的。
B:不要在用增強for遍曆集合的時候,用集合對集合本身進行修改。
(4)遍曆集合三種方式
迭代器
普通for+get
增強for(工作時候用)
Java基礎--第十七天