package collection;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
//容器的同步控制与只读控制,借助Collections工具类
/*同步控制
* synchronizedList(List<T> list)
synchronizedSet(Set<T> s)
* synchronizedMap(Map<K,V> m)
* 只读控制即不可变控制
* 不可变容器
* unmodifiableList(List<? extends T> list)
unmodifiableSet(Set<? extends T> s)
unmodifiableMap(Map<? extends K,? extends V> m)
空的不可变的集合,可避免空指针异常
emptyList()
emptySet()
emptyMap()
一个元素不可变集合
singletonList(T o)
singleton(T o)
singletonMap(K key, V value)
* */
public class SynchronizedAndUnmodified {
//测试同步控制
public static void main1(String[] args) {
List<String> list = new ArrayList<>();
List<String> synchronizedList = Collections.synchronizedList(list);
}
//测试不可变容器
public static void main2(String[] args) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
List<String> unmodifiableList = Collections.unmodifiableList(list);
list.add("c");
System.out.println(list.size());
System.out.println(unmodifiableList.size());
//unmodifiableList.add("d");此处报错
}
//测试空的不可变的容器
public static void main3(String[] args) {
//建了个空集合
List<Object> emptyList = Collections.emptyList();
System.out.println(emptyList.size());
List<String> list = new ArrayList<>();
list = null;
List<String> test = test(list);
//此处避免了空指针异常,但是出现了不被支持的异常
test.add("a");
}
public static <T> List<T> test(List<T> list){
if(list == null) {
return Collections.emptyList();
}
return list;
}
//测试一个元素不可变集合
public static void main(String[] args) {
List<String> singletonList = Collections.singletonList("a");
Set<Integer> singleton = Collections.singleton(1);
Map<String, Integer> singletonMap = Collections.singletonMap("a",1);
}
}