Java基础:集合类之Collections

1 常用工具方法

sort(List<T> list):List排序

sort(List<T> list, Comparator<? super T> c):List排序,指定比较器

int binarySearch(List<? extends Comparable<? super T>> list, T key):二分法查找List

int binarySearch(List<? extends T> list, T key, Comparator<? super T> c):二分法查找List

reverse(List<?> list) :反转List

shuffle(List<?> list):对List洗牌

shuffle(List<?> list, Random rnd) :对List洗牌,并指定随机对象

swap(List<?> list, int i, int j):交换List中两个位置的对象

fill(List<? super T> list, T obj):用指定对象填充整个List

copy(List<? super T> dest, List<? extends T> src):复制List

replaceAll(List<T> list, T oldVal, T newVal):用新值替换掉List中的所有指定老值。


min(Collection<? extends T> coll):查找集合中的最小元素

min(Collection<? extends T> coll, Comparator<? super T> comp):查找集合中的最小元素,并指定比较器

max(Collection<? extends T> coll):查找集合中的最大元素

max(Collection<? extends T> coll, Comparator<? super T> comp):查找集合中的最大元素,并指定比较器


2 同步控制

Collections类中提供了多个synchronizedXxx( )方法,该方法可以将指定集合包装成线程同步的集合,从而可以解决多线程并发访问集合时的线程安全问题。

Java中常用的实现类ArrayList、ArrayDequeLinkedListHashMapTreeMapHashSetTreeSet都是线程不安全的。如果有超过一个线程试图修改它们,则可能出现错误。

Collections提供了多个静态方法,可以把它们包装成线程同步的集合。

Collection:

Collection<T> synchronizedCollection(Collection<T> c)

Collection<T> synchronizedCollection(Collection<T> c, Object mutex)

对应的,Collections定义了一个内部类SynchronizedCollection。


List:

List<T> synchronizedList(List<T> list)

List<T> synchronizedList(List<T> list, Object mutex)

对应的,Collections定义了一个内部类SynchronizedList。


Map:

Map<K,V> synchronizedMap(Map<K,V> m)

对应的,Collections定义了一个内部类SynchronizedMap。


SortedMap<K,V> synchronizedSortedMap(SortedMap<K,V> m)

对应的,Collections定义了一个内部类SynchronizedSortedMap。


Set:

Set<T> synchronizedSet(Set<T> s)

对应的,Collections定义了一个内部类SynchronizedSet。


SortedSet<T> synchronizedSortedSet(SortedSet<T> s)

对应的,Collections定义了一个内部类SynchronizedSortedSet。


示例:

	public static void main(String[] args) {
		// 下面代码创建了四个同步的集合对象
		Collection c = Collections.synchronizedCollection(new ArrayList());

		List list = Collections.synchronizedList(new ArrayList());
		Set set = Collections.synchronizedSet(new HashSet());
		Map map = Collections.synchronizedMap(new HashMap());
	}

直接将新创建的集合对象传给Collections的synchronizedXxx( )方法,这样就可以直接获取List、Set和Map的线程安全实现版本。


3 不可变集合

Collections提供了三类方法来返回一个不可变的集合:

  • emptyXxx():返回一个空的,不可变的集合对象,此处的集合既可以是List,也可以是Set,还可以是Map。

  • SingletonXxx():返回一个只包含指定对象(只有一个或一项元素)的、不可变的集合对象,此处的集合既可以是List,也可以是Set,还可以是Map。

  • unmodifiableXxx():返回指定集合对象的不可变视图,此处的集合既可以是List,也可以是Set,还可以是Map。

以上三类方法的参数是原有的集合对象,返回值是该集合版本的“只读”版本。

3.1 empty

Set<T> emptySet():返回Collections的内部类EmptySet的对象

List<T> emptyList():返回Collections的内部类EmptyList的对象

Map<K,V> emptyMap():返回Collections的内部类EmptyMap的对象


3.2 singleton

Set<T> singleton(T o):返回Collections的内部类SingletonSet的对象

List<T> singletonList(T o):返回Collections的内部类SingletonList的对象

Map<K,V> singletonMap(K key, V value):返回Collections的内部类SingletonMap的对象


3.3 unmodifiable

Collection<T> unmodifiableCollection(Collection<? extends T> c):返回Collections的内部类UnmodifiableCollection的对象


Set<T> unmodifiableSet(Set<? extends T> s):返回Collections的内部类UnmodifiableSet的对象

SortedSet<T> unmodifiableSortedSet(SortedSet<T> s):返回Collections的内部类UnmodifiableSortedSet的对象


List<T> unmodifiableList(List<? extends T> list):返回Collections的内部类UnmodifiableList的对象


Map<K,V> unmodifiableMap(Map<? extends K, ? extends V> m):返回Collections的内部类UnmodifiableMap的对象

SortedMap<K,V> unmodifiableSortedMap(SortedMap<K, ? extends V> m):返回Collections的内部类UnmodifiableSortedMap的对象


示例:

	public static void main(String[] args) {
		// 空的、不可改变的List对象
		List emptyList = Collections.emptyList();

		// 只有一个元素,且不可改变的Set对象
		Set singletonSet = Collections.singleton("sun");

		// 创建一个普通的Map对象
		Map scores = new HashMap();
		scores.put("语文", 80);
		scores.put("java", 82);

		// 返回普通Map对象的不可变版本
		Map unmodifiableMap = Collections.unmodifiableMap(scores);

		// 下面代码试图改变这几个“只读”版本的集合时,会报UnsupportedOperationException异常
		emptyList.add("ceshi");
		singletonSet.add("ceshi");
		unmodifiableMap.put("英语", 81);
	}



你可能感兴趣的:(Java基础:集合类之Collections)