corejava基礎知識(6)-檢視

Zouxxyy發表於2019-03-13

集合包裝器檢視

Array包裝成List:

Card[] cardArray = new Card[52];
List<Card> cardList = Arrays.asList(cardArray);
複製程式碼

Arrays類的靜態方法 asList 將返回一個包裝了 List 的包裝器。 注意返回的是檢視物件,它只能使用getset方法。

Map包裝成Set:

  • Set<Map.Entry<K, V>> entrySet()返回Map.Entry物件的一個集檢視。
  • Set<K> keySet() 返回對映中所有鍵的一個集檢視。
  • Col1ection<V> values() 返回對映中所有值的一個集合檢視。

可以從集檢視中刪除元素,對映中對應的鍵和值也會被刪除, 不過不能增加任何元素。

子範圍檢視

可以為集合建立子範圍檢視

List group2 =staff.subList(10, 20); // 列表的子範圍

SortedSet<E> subSet(E from, E to); //有序集根據排序順序建立子檢視
SortedSet<E> headSet(E to);
SortedSet<E> tailSet(E from);

SortedMap<K, V> subMap(K from, K to); //和有序集同理
SortedMap<K, V> headMap(K to);
SortedMap<K, V> tailMap(K from);
複製程式碼

注意:

  • 範圍是左閉右開
  • 可以將任何操作應用於子範圍, 並且能夠自動地反映到原範圍。
  • 對順序集合對子集合新增元素時,新元素必須在子範圍內

不可修改的檢視

顧名思義生成不可修改的檢視,如果發現試圖對集合進行修改,就丟擲一個異常。當然原物件肯定還是可以修改的。

例如:生成一個不可修改的Map檢視:

TreeMap<String, Integer> scores = new TreeMap<>();
...
Map<String, Integer> umMap = Collections.synchronizedSortedMap(scores);
複製程式碼

同步檢視

類庫的設計者使用檢視機制來確保常規集合的執行緒安全,而不是實現執行緒安全的集合類。

例如:新建一個執行緒安全的Map:

Map<String, Employee〉map = Collections.synchronizedMap(new HashMap<String, Employee>());
複製程式碼

受查檢視

受查檢視可以查出 將錯誤型別的元素混人泛型集合 這種情況。

例如:

List<String> safestrings = Collections.checkedList(strings,String,class);
複製程式碼

當加入錯誤型別時,會得到錯誤報告。