Java List 、List 、List 、List 、List 的區別

T, E and U are the same, but people tend to use e.g. T for type, E for Element, V for value and K for key.

List<T>、List<?>、List<Object>

List<T>、List<?>、List<Object>這三者都可以容納所有的對象,但使用的順序應該是首選List<T>,次之List<?>,最后選擇List<Object>,原因如下:

(1) List<T>是確定的某一個類型
List<T>表示的是List集合中的元素都為T類型,具體類型在運行期決定;List<?>表示任意類型,與List<T>類似,而List<Object>則表示List集合中的所有元素為Object類型,因為Object是所有類的父類,所以List<Object>也可以容納所有的類類型,從這一字面意義上分析,List<T>更符合習慣:編碼者知道它是某一個類型,只是在運行期才確定而已。

(2) List<T>可以進行讀寫操作
List<T>可以進行諸如add、remove等操作,因為它的類型是固定的T類型,在編碼期 不需要進行任何的轉型操作。
List<?>是只讀類型的,不能進行增加、修改操作,因為編譯器不知道List中容納的是 什么類型的元素,也就無畢校驗類型是否安全了,而且List<?>讀取出的元素都是Object類 型的,需要主動轉型,所以它經常用於泛型方法的返回值。注意,List<?>雖然無法增加、修 改元素,但是卻可以刪除元素,比如執行remove、clear等方法,那是因為它的刪除動作與泛型類型無關。
List<Object>也可以讀寫操作,但是它執行寫入操作時需要向上轉型(Upcast),在讀 取數據后需要向下轉型(Downcast),而此時已經失去了泛型存在的意義了。

List<E> List<T> Map<K, V>

E是Element首字母的縮寫,E通常用來表示集合類型中的元素類型;
例如List接口的定義:

public interface List<E> extends Collection<E> 

K,V是Key, Value的首字符縮寫,通常用來表示Map的鍵值類型;

public interface Map<K, V> 

<T> T 表示“返回值”是一個泛型,傳遞什么類型,就返回什么類型

private <T> T getListFirst(List<T> data){ if(data == null || data.size() == 0){ return null; } return data.get(0); } 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。