thinkinginjava學習筆記10_容器

Java中並無像Perl、Python、Ruby那樣對容器有直接的支持,可是能夠依靠容器類來完成相同的工做;html

泛型

使用一個ArrayList對象能夠保存一系列的對象,如: ArrayList apples = new ArrayList(); 申明一個ArrayList對象apples,接下來能夠往apples中添加對象:apples.add(object),也能夠根據索引獲取對象:apples.get(index),此時,放置的對象都是Object類型的,這是不安全的類型,由於不能保證全部的對象都使用同一個接口,當裏面放置了兩種不一樣類型的對象時,就會產生某些問題;java

爲了使用更加安全的容器,須要用到泛型,如示例代碼中展現的那樣,使用一對尖括號來表示泛型:ArrayList<Apple> apples = new ArrayList<Apple>();此時,若是往該容器中添加其餘類型的對象,編譯器就會發現而且報錯;同時能夠看到,泛型支持向上轉型;git

容器的類型

容器能夠分爲兩種:github

1. Collection,單獨元素的序列對象,包括:List、Set、Queue;編程

2. Map,一組成對的「鍵值對」對象;api

容器類型使用中,建立一個具體類的對象,而後轉型爲對應引用,以後針對該接口進行編程;如:ArrayList 是List的子類,能夠申明:數組

List<Apple> apples = new ArrayList<Apple>();安全

此時ArrayList被向上轉型爲List,保證只用到List中的接口而沒有用到ArrayList的特有接口的話,這樣的申明可讓對象的具體類變化更加方便,如更改成LinkedList:oracle

List<Apple> apples = new LinkedList<Apple>();app

而不用更改其餘的任何代碼,由於全部的工做都是在List的接口上進行的;

全部的Collection都支持foreach語法;

經過Collection.addAll()方法能夠添加一個Collection對象來完成初始化;用新建一個空的Collection對象,而後再用Collections.addAll()方法來添加對象更加快捷,是首選的初始化方式;如示例代碼中,新建Collections.addAll將更多的元素添加到第一個參數:collection對象中;一樣的Arrays.asList()能夠更加快捷地生成ArrayList對象;

Arrays.asList()可能會產生一些問題,並不能根據左邊的式子進行向上轉型,須要顯示申明類型,如:Arrays.<Snow>asList();來進行準確的操做;

List

List類包含兩種類型:

ArrayList:在數組中隨機訪問元素速度較快,可是插入元素和刪除元素較慢;

LinkedList:訪問元素速度較慢,可是插入和刪除元素較快;

具體的方法查看手冊:http://docs.oracle.com/javase/7/docs/api/java/util/List.html

LinkedList提供Queue和Stack的支持;因爲設計上的缺陷,最好取消使用Stack,而使用LinkedList代替;

Map

Map類包含:

HashMap:設計用來快速訪問,其中鍵是無序保存;

TreeMap:鍵始終處於排序狀態,訪問速度較慢;

LinkedHashMap:保持元素的插入順序,同時提供快速的訪問能力;

總結

這章講的有的碎,比較好的是下面的分類圖:

NewImage

其中虛線框表示接口,實線框表示具體類,黑線框是比較經常使用的容器;空心箭頭表示一個特定的類實線一個接口,實心箭頭表示某個類能夠生成箭頭所指向類的對象;

具體的就看文檔吧,感受更加清晰而且具體一些

相關文章
相關標籤/搜索