Java集合框架:Collections工具类

简介: java.util.Collections工具类提供很多有用的方法,使得程序猿操作集合类的时候更加的方便容易,这些方法都是静态的。整个Collections工具类源码差不多有4000行,我们针对一些典型的方法进行阐述。

java.util.Collections工具类提供很多有用的方法,使得程序猿操作集合类的时候更加的方便容易,这些方法都是静态的。整个Collections工具类源码差不多有4000行,我们针对一些典型的方法进行阐述。


1. 调用一个空List,Set,Map

public static final List EMPTY_LIST = new EmptyList<>();
public static final Map EMPTY_MAP = new EmptyMap<>();
public static final Set EMPTY_SET = new EmptySet<>();

2. addAll

public static <T> boolean addAll(Collection<? super T> c, T… elements):向指定的集合c中加入特定的一些元素elements
案例2-1:

        List<String> list = new ArrayList<>();
        list.add("s2");
        list.add("s4");
        list.add("s1");
        list.add("s3");
        System.out.println(list);
        Collections.addAll(list, "s5","s7",null,"s9");
        System.out.println(list);

运行结果:

[s2, s4, s1, s3]
[s2, s4, s1, s3, s5, s7, null, s9]

3. binarySearch

public static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key)
public static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c)
利用二分法在指定的集合中查找元素,至于Comparable以及Comparator相信看过前面一些列博文的朋友应该很清楚了,具体的也可以参考《Comparable与Comparator浅析


4. sort

public static <T extends Comparable<? super T>> void sort(List<T> list) 需要泛型T类本身支持Comparable接口
public static <T> void sort(List<T> list, Comparator<? super T> c)
具体举例可以参考《Comparable与Comparator浅析


5. shuffle

public static void shuffle(List<?> list)
public static void shuffle(List<?> list, Random rnd)
混排。混排算法所做的正好与sort相反:它打乱在一个List中可能有的任何排列的踪迹。也就是说,基于随机源的输入重排list,这样的排列具有相同的可能性(假设随机源是公正的)。这个算法在实现一个碰运气的Game中非常有用。
案例5-1:

    public static void test3()
    {
        List<String> list = new ArrayList<>();
        list.add("s1");
        list.add("s2");
        list.add("s3");
        list.add("s4");
        Collections.shuffle(list);
        System.out.println(list);
    }

每次运行结果都不同。


6. 反转

有关反转主要有这三个方法:

  1. public static void reverse(List<?> list)直接反转集合的元素
  2. public static <T> Comparator<T> reverseOrder();返回可以使集合反转的比较器Comparator
  3. public static <T> Comparator<T> reverseOrder(Comparator<T> cmp);如果cmp不为null,返回cmp的反转的比较器,即集合的反转的反转,最后就是没反转。如果cmp为null,效果等同于第二个方法.

举几个案例来说明下用法。
案例6-1:

        List<String> list = new ArrayList<>();
        list.add("s1");
        list.add("s2");
        list.add("s3");
        list.add("s4");
        System.out.println(list);
        Collections.reverse(list);
        System.out.println(list);

运行结果:

[s1, s2, s3, s4]
[s4, s3, s2, s1]

案例6-2:

        List<String> list = new ArrayList<>();
        list.add("s1");
        list.add("s2");
        list.add("s3");

        System.out.println(list);

        Comparator<String> comp = Collections.reverseOrder();
        Collections.sort(list,comp);
        System.out.println(list);

运行结果:(同上)
案例6-3:

        List<String> list = new ArrayList<>();
        list.add("s1");
        list.add("s2");
        list.add("s3");
        list.add("s4");
        System.out.println(list);

        Comparator<String> comp = Collections.reverseOrder();
        Collections.sort(list,comp);
        System.out.println(list);

        Comparator<String> comp2 = Collections.reverseOrder(comp);
        Collections.sort(list,comp2);
        System.out.println(list);

运行结果:

[s1, s2, s3, s4]
[s4, s3, s2, s1]
[s1, s2, s3, s4]

如果把Comparator<String> comp2 = Collections.reverseOrder(comp);改成Comparator<String> comp2 = Collections.reverseOrder(null);运行结果:

[s1, s2, s3, s4]
[s4, s3, s2, s1]
[s4, s3, s2, s1]

7.synchronized系列

确保所封装的集合线程安全(强同步)

  1. public static <T> Collection<T> synchronizedCollection(Collection<T> c)
  2. public static <T> SortedSet<T> synchronizedSortedSet(SortedSet<T> s)
  3. public static <T> List<T> synchronizedList(List<T> list)
  4. public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m)
  5. public static <K,V> SortedMap<K,V> synchronizedSortedMap(SortedMap<K,V> m)
  6. public static <T> SortedSet<T> synchronizedSortedSet(SortedSet<T> s)

8. unmodifiable系列

确保所封装的集合不能修改。

  1. public static <T> Collection<T> unmodifiableCollection(Collection<? extends T> c)
  2. public static <T> Set<T> unmodifiableSet(Set<? extends T> s)
  3. public static <T> SortedSet<T> unmodifiableSortedSet(SortedSet<T> s)
  4. public static <T> List<T> unmodifiableList(List<? extends T> list)
  5. public static <K,V> Map<K,V> unmodifiableMap(Map<? extends K, ? extends V> m)
  6. public static <K,V> SortedMap<K,V> unmodifiableSortedMap(SortedMap<K, ? extends V> m)

9.其他

Collections工具类的功能不止上面这些,还有诸如fill(), rotate(), max(), min()等方法,不可能一下子就能全部记住,使用的时候多查查API即可。

参考资料:
1. 《Comparable与Comparator浅析

目录
相关文章
|
2月前
|
安全 架构师 Java
Java大厂面试高频:Collection 和 Collections 到底咋回答?
Java中的`Collection`和`Collections`是两个容易混淆的概念。`Collection`是集合框架的根接口,定义了集合的基本操作方法,如添加、删除等;而`Collections`是一个工具类,提供了操作集合的静态方法,如排序、查找、同步化等。简单来说,`Collection`关注数据结构,`Collections`则提供功能增强。通过小王的面试经历,我们可以更好地理解这两者的区别及其在实际开发中的应用。希望这篇文章能帮助你掌握这个经典面试题。
60 4
|
3月前
|
存储 安全 Java
Java 集合框架中的老炮与新秀:HashTable 和 HashMap 谁更胜一筹?
嗨,大家好,我是技术伙伴小米。今天通过讲故事的方式,详细介绍 Java 中 HashMap 和 HashTable 的区别。从版本、线程安全、null 值支持、性能及迭代器行为等方面对比,帮助你轻松应对面试中的经典问题。HashMap 更高效灵活,适合单线程或需手动处理线程安全的场景;HashTable 较古老,线程安全但性能不佳。现代项目推荐使用 ConcurrentHashMap。关注我的公众号“软件求生”,获取更多技术干货!
62 3
|
1月前
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
129 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
|
11天前
|
存储 监控 数据可视化
SaaS云计算技术的智慧工地源码,基于Java+Spring Cloud框架开发
智慧工地源码基于微服务+Java+Spring Cloud +UniApp +MySql架构,利用传感器、监控摄像头、AI、大数据等技术,实现施工现场的实时监测、数据分析与智能决策。平台涵盖人员、车辆、视频监控、施工质量、设备、环境和能耗管理七大维度,提供可视化管理、智能化报警、移动智能办公及分布计算存储等功能,全面提升工地的安全性、效率和质量。
|
2月前
|
并行计算 算法 Java
Java中的Fork/Join框架详解
Fork/Join框架是Java并行计算的强大工具,尤其适用于需要将任务分解为子任务的场景。通过正确使用Fork/Join框架,可以显著提升应用程序的性能和响应速度。在实际应用中,应结合具体需求选择合适的任务拆分策略,以最大化并行计算的效率。
66 23
|
3月前
|
存储 缓存 安全
Java 集合江湖:底层数据结构的大揭秘!
小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
76 5
|
4月前
|
存储 缓存 安全
Java 集合框架优化:从基础到高级应用
《Java集合框架优化:从基础到高级应用》深入解析Java集合框架的核心原理与优化技巧,涵盖列表、集合、映射等常用数据结构,结合实际案例,指导开发者高效使用和优化Java集合。
|
10月前
|
存储 安全 Java
java集合框架及其特点(List、Set、Queue、Map)
java集合框架及其特点(List、Set、Queue、Map)
|
存储 缓存 安全
Java集合框架(Map篇)
在这个示例代码中,首先定义了一个数组和一个集合,并使用Arrays.asList()方法将数组转换成集合。接着对数组和集合分别进行排序,使用binarySearch()方法查找元素位置,使用copyOf()和copy()方法复制数组和集合,最后输出结果。可以看到,Arrays和Collections提供的方法可以方便地对数组和集合进行操作,节省开发者的时间和精力。
|
10月前
|
Java 程序员
Java集合框架:List、Set、Map类型及泛型详解
Java集合框架:List、Set、Map类型及泛型详解
120 0