(25) 列表優先於陣列

2021-07-30 09:42:00 字數 458 閱讀 3918

陣列是協變的(convariant),如果sub是super的子型別,那麼陣列型別sub就是super的子型別。

object obs=new long[1];  

obs[0]="hhe";

這是可以的

泛型卻是不可變的,list不是list的子型別。

listlist=new arraylist();//編譯錯誤

list.add("hhe");

陣列是具體化的(reified),因此陣列在執行時才知道並檢查它們的元素型別約束。

泛型則是通過擦除(erasure)來實現,因此泛型只在編譯時強化它們的型別資訊,並在執行時丟棄(或者擦除)它們的元素型別約束。擦除就是使泛型可以與沒有使用泛型的**隨意進行互用。

所以一般來說,數值和泛型不能互用,所以發現錯誤第一反應就應該是用列表代替數值。

第25條 列表優先於陣列

陣列與泛型相比,有兩個重要的不同點。陣列是協變的 如果sub是super的子型別,那麼陣列型別sub是super的子型別 相反,泛型是不可變得,對於任意兩個不同的型別t1和t2,list和list沒有子型別或超型別的關係。這段 在執行時出錯 object o new long 1 o 0 i don...

2 列表和陣列

從0開始指出相對於序列開頭的偏移量。這顯得更自然,同時可迴繞到序列末尾,用負索引表示序列末尾元素的位置。禁止修改序列通常出於技術方面的考慮,與python的內部工作原理相關,這也是有些內建函式返回元組的原因所在。如果函式呼叫返回乙個序列,可直接對其執行索引操作。fourth input year 3...

1 列表和列表項

列表 列表是乙個資料結構,用來追蹤任務,列表中有乙個指標指向列表項 列表是乙個結構體,內部攜帶乙個指標,指標指向列表項,列表項形成雙向鏈式結構掛載在列表下 乙個列表下面可以有很多的列表項,每個列表項都會有乙個指標指向這個列表,下面是乙個列表 typedef struct xlist list t l...