Thinking in Java學習筆記(六)

          Posted on 2009-06-12 14:57 eric_xu 閱讀(169) 評論(0)  編輯  收藏 所屬分類: Java

          對象的集合

          數組

          數組標識符其實只是一個引用,指向在堆(heap)中創建的一個真實對象,這個(數組)對象用以保存指向其他對象的引用。

          java.util. Arrays它有一套 static方法,提供操作數組的實用功能。

          要保存基本類型,則只能用數組。

           

          如果你復制對象數組,那么只是復制了引用——不會出現兩份對象的拷貝。這被稱作淺復制、淺拷貝(shallow copy

           

          Collection:一組獨立的元素,通常有某種規則應用于其上。List必須保持元素特定的順序,而 Set不能有重復元素。

          Map:一組成對的鍵值對(key-value)對象。Map可以返回所有鍵組成的Set,所有值組成的 Collection,或其鍵值對組成的Set

          Java的容器類有兩種基本類型,區別在于容器中每個位置保存的元素個數。Collection每個位置只能保存一個元素。包括List,它以特定的順序保存一組元素;Set,元素不能重復。ArrayList 是一種List,而HashSet是一種Set。將元素添入任意Collection都可使用 add()方法。

          Map保存的是鍵值對,(Map也被稱作關聯數組)使用方法put()Map添加元素,它需要一個鍵與一個值作為參數。

           

          Java容器的“缺點”,在將對象加入容器的時候就丟失了類型信息。容器只保存Object型的引用,這是所有類的基類,因此容器可以保存任何類型的對象。

          ArrayList看作是“能夠自動擴展的數組”。

           

          迭代器是一個對象,它的工作是遍歷并選擇序列中的對象。

          1. 使用方法iterator()要求容器返回一個Iterator。第一次調用Iteratornext()方法時,它返回序列的第一個元素。

          2. 使用next()獲得序列中的下一個元素。

          3. 使用hasNext()檢查序列中是否還有元素。

          4. 使用remove()將上一次返回的元素從迭代器中移除。

          container.jpg

          點線方框表示接口,虛線方框表示抽象類,實線方框表示普通的(具體的)類。點線箭頭代表特定的類實現一個接口(若是抽象類,則表示部分實現了接口)。實線箭頭表示一個類可以生成箭頭所指向類的對象。

          三種容器:MapListSet,它們各有兩到三個實現版本。常用的容器用黑色粗線框表示。

           

          與持有對象有關的接口是CollectionListSetMap

          接口的優美之處(或者說目的)在于,如果你決定改變當前的實現,只需要在創建的位置做些修改即可。

          List x = new LinkedList();

          List x = new ArrayList();

           

          典型情況是你會生成一個“具體類”的對象,然后將它向上轉型為對應的接口,在代碼中使用接口操作它。

          container simple.jpg.jpg

          Collection的功能方法:

          可以通過SetList執行的所有操作。

           

          兩種List:一種是基本的ArrayList,允許對元素進行快速隨機訪問,但是向 List 中間插入與移除元素的速度很慢。ListIterator只應該用來由后向前遍歷ArrayList,而不是用來插入和移除元素,因為那比LinkedList開銷要大很多;另一種是更強大的LinkedList,對順序訪問進行了優化,向List中間插入與刪除的開銷并不大,隨機訪問則相對較慢。LinkedList 可以當作堆棧、隊列和雙向隊列使用。

          次序是List最重要的特點;它保證維護元素特定的順序。一個List可以生成ListIterator,使用它可以從兩個方向遍歷List,也可以從List中間插入和移除元素。

           

          Set具有與Collection完全一樣的接口,實際上Set就是Collection,只是行為不同。存入Set 的每個元素都必須是唯一的,因為Set不保存重復元素。加入Set的元素必須定義equals()方法以確保對象的唯一性。

          HashSet為快速查找設計的Set。存入HashSet的對象必須定義hashCode()

          Set需要維護元素的存儲順序,這意味著你必須實現Comparable接口,并且定義compareTo()方法。

          posts - 37, comments - 5, trackbacks - 0, articles - 0

          Copyright © eric_xu

          主站蜘蛛池模板: 深水埗区| 马公市| 灵台县| 通许县| 永泰县| 内丘县| 东莞市| 乐亭县| 广丰县| 双桥区| 论坛| 清涧县| 吉木乃县| 安阳县| 新郑市| 通许县| 寿阳县| 富川| 涿鹿县| 泸西县| 青川县| 仙桃市| 四平市| 环江| 泰和县| 马龙县| 信阳市| 阿克苏市| 江口县| 平乡县| 镶黄旗| 乐陵市| 股票| 阳信县| 蕲春县| 泸定县| 南岸区| 禄丰县| 清新县| 平和县| 青浦区|