设置Collection 或 Map 只读
有的時候創(chuàng)建一個具有只讀屬性的Collection 或 Map,會帶來很多方便。Collections 類可以幫我們實現(xiàn)這個目的,它有一個方法,參數(shù)為原本的容器,返回的容器是具有只讀屬性的容器。可以應(yīng)用于Collection、List、Map、Set。
下面是關(guān)于Collections 類的具體方法:
static < T > Collection< T > unmodifiableCollection(Collection< ? extends T> c)
??????返回指定 collection 的不可修改視圖。
static < T > List< T > unmodifiableList(List< ? extends T> list)
?????? 返回指定列表的不可修改視圖。
static < K,V> Map< K,V> unmodifiableMap(Map< ? extends K,? extends V> m)
??????返回指定映射的不可修改視圖。
static < T > Set< T > unmodifiableSet(Set< ? extends T> s)
??????返回指定 set 的不可修改視圖。
static < K,V> SortedMap< K,V> unmodifiableSortedMap(SortedMap< K,? extends V> m)
??????返回指定有序映射的不可修改視圖。
static < T > SortedSet< T > unmodifiableSortedSet(SortedSet< T > s)
?????? 返回指定有序 set 的不可修改視圖。
下面是一個實現(xiàn)的例子:設(shè)置為只讀屬性后,如果你執(zhí)行其他添加或者刪除動作,你將在運行時期得到一個 java.lang.UnsupportedOperationException 異常。
import java.util.*; /** 設(shè)置只讀Collection */ public class ReadOnly {public static void main(String[] args) {String[] strArray = {"Hello","World"};List<String> list = Collections.unmodifiableList(new ArrayList<>(Arrays.asList(strArray)));// list.add("Jas");// list.remove(1);System.out.println(list);Integer[] intArray = {1,2,3,4,5};Set<Integer> set = Collections.unmodifiableSet(new HashSet<>(Arrays.asList(intArray)));//set.add(6);System.out.println(set);Map<String,Integer> map1 = new HashMap<>();map1.put("one",1);map1.put("two",2);Map<String,Integer> map2 = Collections.unmodifiableMap(map1);// map2.put("three",3);System.out.println(map2);} }對特定類型的“不可修改的”方法調(diào)用并不會在編譯期進(jìn)行檢查,但是在轉(zhuǎn)換完成后,任何會改變?nèi)萜鲀?nèi)元素內(nèi)容的操作都會報異常。所以在將容器設(shè)為只讀屬性之前,必須填入有意義的數(shù)據(jù)。不過此方法允許你保留一份可以修改的容器,作為類的private 屬性,然后通過某個方法調(diào)用返回該容器的“只讀”的引用。這樣你就可以修改容器中的內(nèi)容,而別人只能讀取。
總結(jié)
以上是生活随笔為你收集整理的设置Collection 或 Map 只读的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HashMap 的性能因子
- 下一篇: 唐山城南经济开发区偏不偏(唐山城南经济开