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、ArrayDeque、LinkedList、HashMap、TreeMap、HashSet、TreeSet都是线程不安全的。如果有超过一个线程试图修改它们,则可能出现错误。
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); }