前言
工欲善其事必先利其器,要想用好java必须先知道java有什么!
Collections
java提供的操作集合,更贴切的应该说容器,的工具,提供很多容器(Collection+Map)操作。
-
容器封装
-
空容器:
方法 方法描述 迭代器: java.util.Collections#emptyEnumeration 老式迭代器,现在已经被Interable基本替代了 java.util.Collections#emptyIterator Iterator java.util.Collections#emptyListIterator ListIterator 集合: java.util.Collections#emptyList List java.util.Collections#emptySet Set java.util.Collections#emptySortedSet SortedSet java.util.Collections#emptyNavigableSet NavigableSet Queue 无 Map: java.util.Collections#emptyMap Map java.util.Collections#emptySortedMap SortedMap java.util.Collections#emptyNavigableMap NavigableMap -
构建由单一元素构成的集合
方法 方法描述 java.util.Collections#singletonList List java.util.Collections#singleton Set java.util.Collections#singletonMap Map -
元素检查容器
方法 方法描述 集合: java.util.Collections#checkedCollection Collection java.util.Collections#emptySet Set java.util.Collections#checkedSortedSet SortedSet java.util.Collections#checkedNavigableSet NavigableSet java.util.Collections#checkedList List java.util.Collections#checkedQueue Queue Map: java.util.Collections#checkedMap Map,key和value都会校验类型 java.util.Collections#checkedSortedMap SortedMap java.util.Collections#checkedNavigableMap NavigableMap -
不可修改容器
方法 方法描述 集合: java.util.Collections#unmodifiableCollection Collection java.util.Collections#unmodifiableSet Set,增加一些方法,其父类还是unmodifiableCollection java.util.Collections#unmodifiableSortedSet SortedSet,与Set类似,父类是UnmodifiableSet java.util.Collections#unmodifiableNavigableSet NavigableSet,父类是UnmodifiableSortedSet java.util.Collections#unmodifiableList List Queue 无 Map: java.util.Collections#unmodifiableMap Map,key和value都会校验类型 java.util.Collections#unmodifiableSortedMap SortedMap java.util.Collections#unmodifiableNavigableMap NavigableMap -
同步容器:内部采用synchronized关键字同步
方法 方法描述 集合: java.util.Collections#synchronizedCollection Collection, java.util.Collections#synchronizedSet Set,增加一些方法,其父类还是SynchronizedCollection java.util.Collections#synchronizedSortedSet SortedSet,与Set类似,父类是SynchronizedSet java.util.Collections#synchronizedNavigableSet NavigableSet,父类是SynchronizedSortedSet java.util.Collections#synchronizedList List,父类是SynchronizedCollection Queue 无 Map: java.util.Collections#synchronizedMap Map java.util.Collections#synchronizedSortedMap SortedMap,父类SynchronizedMap java.util.Collections#synchronizedNavigableMap NavigableMap,父类SynchronizedSortedMap
小结:Collections提供的同步容器虽好,但是由于它是将容器的每一个方法都使用synchronized关键字进行同步,所以在性能上并不占优势。还是应该尽量从自己的实际业务场景出发,选择更合适的同步容器。例如:在读多写少的业务场景,同步容器可以选择CopyOnWriteArrayList。
-
-
容器操作
-
集合搜索
a. 用二分法搜索指定key的元素下标java.util.Collections#binarySearch
b. 查找某个key出现的次数/频率
java.util.Collections#frequency
c. 查找极值
极大值
java.util.Collections#max
极小值
java.util.Collections#mind. 集合关系
查找target在source的第一次出现的位置下标,不存在返回-1
java.util.Collections#indexOfSubList(List<?> source, List<?> target)
查找target在source的最后一次出现的位置下标,不存在返回-1
java.util.Collections#lastIndexOfSubList(List<?> source, List<?> target)
集合是否存在交集
java.util.Collections#disjoint(Collection<?> c1, Collection<?> c2) -
集合修改
a. 排序:直接调用list的排序(list的实现底层都是基于Arrays的归并排序法)默认为自然升序,即 1,2,3…
java.util.Collections#sort(java.util.List)
倒叙排列通常需要给一个比较器,而Collections同样提供了倒序的比较器
java.util.Collections#reverseOrder()
java.util.Collections#sort(java.util.List, java.util.Comparator<? super T>)b. 集合元素顺序调整
将集合旋转distance距离,例如 1,2,3,4,5 2 => 4,5,1,2,3
java.util.Collections#rotate(List<?> list, int distance)
打乱顺序
java.util.Collections#shuffle(java.util.List<?>)
将元素顺序反转
java.util.Collections#reverse -
集合元素修改
交换两个位置上的元素
java.util.Collections#swap(java.util.List<?>, int, int)
java.util.Collections#swap(java.lang.Object[], int, int)
将集合中所有等于oldVal的元素,替换成newVal
java.util.Collections#replaceAll(List list, T oldVal, T newVal)
将集合中的元素全部替换为obj
java.util.Collections#fill(List<? super T> list, T obj) -
集合拷贝
将迭代器的元素拷贝到ArrayList
public static ArrayList list(Enumeration e)
将src中的元素替换拷贝到dest(dest前面的元素都是来自src)
public static void copy(List<? super T> dest, List<? extends T> src)
构造一个由o拷贝n次组成的集合
public static List nCopies(int n, T o) -
容器转换
将双端队列转为单向队列
java.util.Collections#asLifoQueue
将Map转为Set
java.util.Collections#newSetFromMap -
从集合获取一个Enumeration迭代器
java.util.Collections#enumeration
总结Collections提供的工具
- 容器封装
- 空容器
- 构建由单一元素构成的集合
- 元素检查容器
- 不可修改容器
- 同步容器:内部采用synchronized关键字同步
- 容器操作
- 集合搜索
方法作用 用二分法搜索指定key的元素下标 查找某个key出现的次数/频率 查找极值 集合关系(子集/交集) - 集合修改
方法作用 排序:直接调用list的排序(list的实现底层都是基于Arrays的归并排序法) 集合元素顺序调整 - 集合元素修改(交换/替换)
- 集合拷贝
- 容器转换
方法作用 将双端队列转为单向队列 将Map转为Set - 从集合获取一个Enumeration迭代器
- 集合搜索