這些都代表了Java中的集合,,這里主要從其元素是否有序,,是否可重復(fù)來(lái)進(jìn)行區(qū)別記憶,,以便恰當(dāng)?shù)厥褂茫?dāng)然還存在同步方面的差異,,見(jiàn)上一篇相關(guān)文章,。
List接口對(duì)Collection進(jìn)行了簡(jiǎn)單的擴(kuò)充,,它的具體實(shí)現(xiàn)類常用的有ArrayList和LinkedList。你可以將任何東西放到一個(gè)List容器中,,并在需要時(shí)從中取出,。ArrayList從其命名中可以看出它是一種類似數(shù)組的形式進(jìn)行存儲(chǔ),因此它的隨機(jī)訪問(wèn)速度極快,,而LinkedList的內(nèi)部實(shí)現(xiàn)是鏈表,,它適合于在鏈表中間需要頻繁進(jìn)行插入和刪除操作。在具體應(yīng)用時(shí)可以根據(jù)需要自由選擇,。前面說(shuō)的Iterator只能對(duì)容器進(jìn)行向前遍歷,,而ListIterator則繼承了Iterator的思想,并提供了對(duì)List進(jìn)行雙向遍歷的方法,。 Set接口也是Collection的一種擴(kuò)展,,而與List不同的時(shí),在Set中的對(duì)象元素不能重復(fù),,也就是說(shuō)你不能把同樣的東西兩次放入同一個(gè)Set容器中,。它的常用具體實(shí)現(xiàn)有HashSet和TreeSet類。HashSet能快速定位一個(gè)元素,,但是你放到HashSet中的對(duì)象需要實(shí)現(xiàn)hashCode()方法,,它使用了前面說(shuō)過(guò)的哈希碼的算法。而TreeSet則將放入其中的元素按序存放,,這就要求你放入其中的對(duì)象是可排序的,,這就用到了集合框架提供的另外兩個(gè)實(shí)用類Comparable和Comparator。一個(gè)類是可排序的,,它就應(yīng)該實(shí)現(xiàn)Comparable接口,。有時(shí)多個(gè)類具有相同的排序算法,那就不需要在每分別重復(fù)定義相同的排序算法,,只要實(shí)現(xiàn)Comparator接口即可,。集合框架中還有兩個(gè)很實(shí)用的公用類:Collections和Arrays。Collections提供了對(duì)一個(gè)Collection容器進(jìn)行諸如排序,、復(fù)制,、查找和填充等一些非常有用的方法,Arrays則是對(duì)一個(gè)數(shù)組進(jìn)行類似的操作。 Map是一種把鍵對(duì)象和值對(duì)象進(jìn)行關(guān)聯(lián)的容器,,而一個(gè)值對(duì)象又可以是一個(gè)Map,,依次類推,這樣就可形成一個(gè)多級(jí)映射,。對(duì)于鍵對(duì)象來(lái)說(shuō),,像Set一樣,一個(gè)Map容器中的鍵對(duì)象不允許重復(fù),,這是為了保持查找結(jié)果的一致性;如果有兩個(gè)鍵對(duì)象一樣,,那你想得到那個(gè)鍵對(duì)象所對(duì)應(yīng)的值對(duì)象時(shí)就有問(wèn)題了,可能你得到的并不是你想的那個(gè)值對(duì)象,,結(jié)果會(huì)造成混亂,,所以鍵的唯一性很重要,也是符合集合的性質(zhì)的,。當(dāng)然在使用過(guò)程中,,某個(gè)鍵所對(duì)應(yīng)的值對(duì)象可能會(huì)發(fā)生變化,這時(shí)會(huì)按照最后一次修改的值對(duì)象與鍵對(duì)應(yīng),。對(duì)于值對(duì)象則沒(méi)有唯一性的要求,。你可以將任意多個(gè)鍵都映射到一個(gè)值對(duì)象上,這不會(huì)發(fā)生任何問(wèn)題(不過(guò)對(duì)你的使用卻可能會(huì)造成不便,,你不知道你得到的到底是那一個(gè)鍵所對(duì)應(yīng)的值對(duì)象),。Map有兩種比較常用的實(shí)現(xiàn):HashMap和TreeMap。HashMap也用到了哈希碼的算法,,以便快速查找一個(gè)鍵,,TreeMap則是對(duì)鍵按序存放,因此它便有一些擴(kuò)展的方法,,比如firstKey(),lastKey()等,,你還可以從TreeMap中指定一個(gè)范圍以取得其子Map。鍵和值的關(guān)聯(lián)很簡(jiǎn)單,,用pub(Object key,Object value)方法即可將一個(gè)鍵與一個(gè)值對(duì)象相關(guān)聯(lián),。用get(Object key)可得到與此key對(duì)象所對(duì)應(yīng)的值對(duì)象。 |
|