一、Collections 工具类
1、Collections 是一个操作 Set、List 和 Map 等集合的工具类。
2、Collections 中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象设置不可变、对集合对象实现同步控制等方法
3、
4、
5、
二、Collections 方法列表
三、常用方法说明
1、排序操作
1 2 3 4 5 6 7 8 9 10 11 | public static void reverse(List<?> list) {} 反转 List 中元素的顺序 public static void shuffle(List<?> list) {} 对 List 集合元素进行随机排序 public static void shuffle(List<?> list, Random rnd) {} 对 List 集合元素进行随机排序 public static void swap(List<?> list, int i, int j) {} 将指定 list 集合中的 i 处元素和 j 处元素进行交换 public static <T extends Comparable<? super T>> void sort(List<T> list) {} 对List集合元素按照默认规则进行排序(默认升序) public static <T> void sort(List<T> list, Comparator<? super T> c) {} 根据指定的 Comparator 产生的顺序对 List 集合元素进行排序 public static void rotate(List<?> list, int distance) //旋转。当distance为正数时,将list后distance个元素整体移到前。当distance为负数时,将 list的前distance个元素整体移到后 |
注意:被排序的集合里边存储的元素,必须实现Comparable,重写接口中的方法compareTo定义排序的规则。
2、查找、替换
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public static <T> void fill(List<? super T> list, T obj) {} 将List集合中填充为 obj public static <T> void copy(List<? super T> dest, List<? extends T> src) {} 复制 src 到 dest public static <T extends Object & Comparable<? super T>> T min(Collection<? extends T> coll) {} 根据元素的自然顺序,返回给定集合中的最小元素 public static <T> T min(Collection<? extends T> coll, Comparator<? super T> comp) {} 根据指定的比较器,返回给定集合中的最大元素 public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll) {} 根据元素的自然顺序,返回给定集合中的最大元素 public static <T> T max(Collection<? extends T> coll, Comparator<? super T> comp) {} 根据指定的比较器,返回给定集合中的最大元素 public static <T> boolean replaceAll(List<T> list, T oldVal, T newVal) {} 使用新值替换List 对象的所有旧值 public static int frequency(Collection<?> c, Object o) {} 返回指定集合中指定元素的出现次数 int binarySearch(List list, Object key) //对List进行二分查找,返回索引,注意List必须是有序的int indexOfSubList(List list, List target)//统计target在list中第一次出现的索引,找不到则返回-1,类比 int lastIndexOfSubList(List source, list target). |
copy方法测试:
1 @Test
2 public void test2(){
3 List list = new ArrayList();
4 list.add(123);
5 list.add(43);
6 list.add(765);
7 list.add(-97);
8 list.add(0);
9
10 //报异常:IndexOutOfBoundsException("Source does not fit in dest")
11 //List dest = new ArrayList();
12 //Collections.copy(dest,list);
13 //正确的:
14 List dest = Arrays.asList(new Object[list.size()]);
15 System.out.println(dest.size());//list.size();
16 Collections.copy(dest,list);
17
18 System.out.println(dest);
19 }
3、空集合
当操作一个方法时,如果返回的集合是一个空对象,并不应该返回 null,而是应该返回一个空集合。
Collections 给我们提供了几种返回空集合的方法:
1 2 3 4 5 | public static final <T> Set<T> emptySet() {} public static <E> SortedSet<E> emptySortedSet() {} public static final <T> List<T> emptyList() {} public static final <K,V> Map<K,V> emptyMap() {} public static final <K,V> SortedMap<K,V> emptySortedMap() {} |
4、同步控制
Collections 类中提供了多个 synchronizedXxx() 方法,该方法可使将指定集合包装成线程同步的集合,从而可以解决多线程并发访问集合时的线程安全问题。
1 2 3 4 5 6 7 8 9 10 11 | public static <T> Collection<T> synchronizedCollection(Collection<T> c) {] static <T> Collection<T> synchronizedCollection(Collection<T> c, Object mutex) {} public static <T> Set<T> synchronizedSet(Set<T> s) {} static <T> Set<T> synchronizedSet(Set<T> s, Object mutex) {} public static <T> SortedSet<T> synchronizedSortedSet(SortedSet<T> s) {} public static <T> NavigableSet<T> synchronizedNavigableSet(NavigableSet<T> s) {} public static <T> List<T> synchronizedList(List<T> list) {} static <T> List<T> synchronizedList(List<T> list, Object mutex) {} public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m) {} public static <K,V> SortedMap<K,V> synchronizedSortedMap(SortedMap<K,V> m) {} public static <K,V> NavigableMap<K,V> synchronizedNavigableMap(NavigableMap<K,V> m) {} |
我们知道 HashSet , TreeSet , ArrayList , LinkedList , HashMap , TreeMap 都是线程不安全的。
Collections 提供了多个静态⽅法可以把他们包装成线程同步的集合。
最好不要⽤下⾯这些⽅法,效率⾮常低,需要线程安全的集合类型时请考虑使用 JUC 包下的并发集合。
5、补充:Enumeration
Enumeration 接口是 Iterator 迭代器的 “古老版本”
案例:
1 Enumeration stringEnum = new StringTokenizer("a-b*c-d-e-g", "-");
2 while(stringEnum.hasMoreElements()){
3 Object obj = stringEnum.nextElement();
4 System.out.println(obj);
5 }
四、
五、
六、
分类:
Java SE
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战