程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> [Think In Java]基礎拾遺3,think拾遺

[Think In Java]基礎拾遺3,think拾遺

編輯:JAVA綜合教程

[Think In Java]基礎拾遺3,think拾遺


 目錄

第十一章 持有對象
第十七章 容器深入研究
第十八章 Java I/O系統

第十一章 持有對象

1. java容器概覽

java容器的兩種主要類型(它們之間的主要區別在於容器中每個“槽”保存的元素個數):Collection和Map。

(1)Collection是一個獨立元素的序列,這些元素都服從一條或者多條規則。Collection概括了序列的概念——一種存放一組對象的方式。

  • List:按照插入的順序保存元素(ArrayList,LinkedList)
  • Set:不能有重復元素(HashSet,TreeSet,LinkedHasSet)
  • Queue:按照排隊規則來確定對象產生的順序(按排隊時間長短即FIFO、按優先級高低)

(2)Map是一組成對的“鍵值對”對象,允許使用鍵來查找值。

  • HashMap:無序
  • TreeMap:按照比較結果的升序保存鍵
  • LinkedHashMap:按照插入順序保存鍵

 

2. 相關工具類java.util.Arrays類和java.util.Collections類。

(1)添加一組元素

Arrays.asList();

Collections.asList();

(2)容器的打印

Arrays.toString();

 

3. 迭代器

遍歷容器而不關心容器的具體類型。迭代器也是一種設計模式。(和C++中的迭代器類似)

Collection接口有一個iterator()方法返回一個Iterator對象,也就是說每個繼承自Collection的容器都可以迭代(Collection接口繼承自Iterable接口)。Iterator有如下方法:

boolean hasNext() :如果仍有元素可以迭代,則返回 true。 
E next() :返回迭代的下一個元素。 
void remove() :從迭代器指向的 collection 中移除迭代器返回的最後一個元素(可選操作,不是所有的容器都實現了該方法)。

 

4. ListIterator

ListIterator繼承自Iterator。Iterator只能向前移動,但是ListIterator可以雙向移動,ListIterator只能用於各種List。

 

5. Set

將兩個相同的對象放入Set中是不行的。Set是基於對象的來確定歸屬性的。

HashSet:基於hash函數;TreeSet:基於紅黑樹;LinkedHashSet:hash函數+鏈表。

TreeSet 使用元素的自然順序對元素進行排序,或者根據創建 set 時提供的 Comparator 進行排序,具體取決於使用的構造方法。

String類有一個比較器String.CASE_INSENSITIVE_ORDER;

 

6. PriorityQueue

一個基於優先級堆的無界優先級隊列。優先級隊列的元素按照其自然順序進行排序,或者根據構造隊列時提供的 Comparator 進行排序,具體取決於所使用的構造方法。

 

7. 簡單的容器分類

 

 

第十七章 容器深入研究

1. 完整的容器分類法

下圖展示了Java容器類庫的完備圖,包括抽象類和遺留構件(不包括Queue的實現)。

常用的容器用黑色粗線框表示,點線框表示接口,虛線框表示抽象類,實線框表示類,空心箭頭表示實現關系。Produce表示任意的Map對象可以生成Collection對象,任意的Collection對象可以生成Iterator對象。

 

2. 容器總結

下面以表格的形式總結List、Set、Map接口及各實現類的特性:

 

特性

實現類

實現類特性

對放置的元素的要求

List

線性、有序的存儲容器,可通過索引訪問元素get(n)

ArrayList

數組實現。非同步。

 

Vector

類似ArrayList,同步。

 

LinkedList

雙向鏈表。非同步。

 

Set

 

元素不能重復,元素必須定義equals()方法

 

HashSet

為快速查找設計的Set

元素必須定義hashCode()

TreeSet

保持次序的Set,底層為樹結構

元素必須實現Comparable接口

LinkedHashSet

內部使用鏈表維護元素的順序(插入的次序)

元素必須定義hashCode()

Map

保存鍵值對成員,Map中的所有鍵必須定義equals()方法

HashMap

基於哈希表的 Map 接口的實現,滿足通用需求

鍵必須有恰當的hashCode(),如果修改了equals方法,需同時修改hashCode方法

TreeMap

默認根據自然順序進行排序,或者根據創建映射時提供的 Comparator進行排序

鍵成員要求實現caparable接口,或者使用Comparator構造TreeMap。鍵成員一般為同一類型。

LinkedHashMap

類似於HashMap,但迭代遍歷時取得“鍵值對”的順序是其插入順序或者最近最少使用的次序

與HashMap相同

IdentityHashMap

使用==取代equals()對“鍵值”進行比較的散列映射

成員通過==判斷是否相等

WeakHashMap

弱鍵映射,允許釋放映射所指向的對象

 

ConcurrentHashMap

線程安全的Map

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved