java-jdk拾遺-list,iterator,enum

[b]List[/b]
如果 List 允許進行多項選擇,則單擊已選中的項時,將取消選中該項。在上面的示例中,一次只能從滾動列表中選擇一項,因爲創建新的滾動列表時,第二個參數爲 false。如果 List 不允許進行多項選擇,則選擇某一項會導致其他選中的項取消選中。

注意,本示例中顯示的列表是用四個可視行創建的。創建該列表之後,不可更改可視行的數量。默認的 List 是用四行創建的,所以 lst = new List() 與 list = new List(4, false) 等效。

從 Java 1.1 開始,AWT(Abstract Window Toolkit,抽象窗口工具包)會把列表上發生的所有鼠標、鍵盤和焦點事件發送給 List 對象。(維護舊的 AWT 事件模型的目的是爲了向後兼容,不推薦使用它。)

當用戶選中或取消選中某項時,AWT 將向列表發送一個 ItemEvent 實例。當用戶雙擊滾動列表中的某一項時,AWT 會在緊隨項事件後向列表發送一個 ActionEvent 實例。當用戶選中列表中的某項,按下 return 鍵時,AWT 也會生成一個動作事件。

如果應用程序需要基於此列表中用戶選中或激活的項執行某個動作,則應該相應地實現 ItemListener 或 ActionListener,並註冊新的偵聽器,以便在此列表中接收事件。

對於多項選擇滾動列表,使用外部動作(如單擊按鈕)來觸發動作被認爲是一種更好的用戶界面。

[b]Iterator[/b]
public interface Iterator<E>對 collection 進行迭代的迭代器。迭代器取代了 Java Collections Framework 中的 Enumeration。迭代器與枚舉有兩點不同:

迭代器允許調用者利用定義良好的語義在迭代期間從迭代器所指向的 collection 移除元素。
方法名稱得到了改進。
[b]Enum[/b]
java.lang.Object
java.lang.Enum<E>
所有已實現的接口:
Serializable, Comparable<E>
[b]EnumMap[/b]
public class EnumMap<K extends Enum<K>,V>extends AbstractMap<K,V>implements Serializable, Cloneable與枚舉類型鍵一起使用的專用 Map 實現。枚舉映射中所有鍵都必須來自單個枚舉類型,該枚舉類型在創建映射時顯式或隱式地指定。枚舉映射在內部表示爲數組。此表示形式非常緊湊且高效。

枚舉映射根據其鍵的自然順序 來維護(該順序是聲明枚舉常量的順序)。在 collection 視圖(keySet()、entrySet() 和 values())所返回的迭代器中反映了這一點。

由 collection 視圖返回的迭代器是弱一致 的:它們不會拋出 ConcurrentModificationException,也不一定顯示在迭代進行時發生的任何映射修改的效果。

不允許使用 null 鍵。試圖插入 null 鍵將拋出 NullPointerException。但是,試圖測試是否出現 null 鍵或移除 null 鍵將不會拋出異常。允許使用 null 值。

像大多數 collection 一樣,EnumMap 是不同步的。如果多個線程同時訪問一個枚舉映射,並且至少有一個線程修改該映射,則此枚舉映射在外部應該是同步的。這一般通過對自然封裝該枚舉映射的某個對象進行同步來完成。如果不存在這樣的對象,則應該使用 Collections.synchronizedMap(java.util.Map) 方法來“包裝”該枚舉。最好在創建時完成這一操作,以防止意外的非同步訪問:

Map<EnumKey, V> m
= Collections.synchronizedMap(new EnumMap<EnumKey, V>(...));
實現注意事項:所有基本操作都在固定時間內執行。雖然並不保證,但它們很可能比其 HashMap 副本更快。
[b]
EnumSet[/b]
public abstract class EnumSet<E extends Enum<E>>extends AbstractSet<E>implements Cloneable, Serializable與枚舉類型一起使用的專用 Set 實現。枚舉 set 中所有鍵都必須來自單個枚舉類型,該枚舉類型在創建 set 時顯式或隱式地指定。枚舉 set 在內部表示爲位向量。此表示形式非常緊湊且高效。此類的空間和時間性能應該很好,足以用作傳統上基於 int 的“位標誌”的替換形式,具有高品質、類型安全的優勢。如果其參數也是一個枚舉 set,則批量操作(如 containsAll 和 retainAll)也應運行得非常快。
由 iterator 方法返回的迭代器按其自然順序 遍歷這些元素(該順序是聲明枚舉常量的順序)。返回的迭代器是弱一致的:它從不拋出 ConcurrentModificationException,也不一定顯示在迭代進行時發生的任何 set 修改的效果。
不允許使用 null 元素。試圖插入 null 元素將拋出 NullPointerException。但是,試圖測試是否出現 null 元素或移除 null 元素將不會拋出異常。
像大多數 collection 實現一樣,EnumSet 是不同步的。如果多個線程同時訪問一個枚舉 set,並且至少有一個線程修改該 set,則此枚舉 set 在外部應該是同步的。這通常是通過對自然封裝該枚舉 set 的對象執行同步操作來完成的。如果不存在這樣的對象,則應該使用 Collections.synchronizedSet(java.util.Set) 方法來“包裝”該 set。最好在創建時完成這一操作,以防止意外的非同步訪問:
Set<MyEnum> s = Collections.synchronizedSet(EnumSet.noneOf(MyEnum.class));
實現注意事項:所有基本操作都在固定時間內執行。雖然並不保證,但它們很可能比其 HashSet 副本更快。如果其參數也是一個枚舉 set ,則批量操作會在固定時間內執行。
此類是 Java Collections Framework 的成員。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章