java.util.Collections工具类提供非常多实用的方法。使得程序员操作集合类的时候更加的方便easy,这些方法都是静态的。

整个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浅析

Java集合框架:Collections工具类的更多相关文章

  1. 【JAVA集合框架之工具类】

    一.概述 JAVA集合框架中有两个很重要的工具类,一个是Collections,另一个是Arrays.分别封装了对集合的操作方法和对数组的操作方法,这些操作方法使得程序员的开发更加高效. public ...

  2. Java:集合框架的工具类

    集合框架的工具类 Arrays:里面都是静态方法,直接用来对各种集合进行操作的公有方法. Collections:里面都是静态方法,直接用来对各种集合进行操作的公有方法. 包括: 1.asList将数 ...

  3. Java从入门到放弃18---Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法

    Java从入门到放弃18—Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法01 Map集合Map集合处理键值映射关系的数据为了方便 ...

  4. Java最重要的21个技术点和知识点之JAVA集合框架、异常类、IO

    (三)Java最重要的21个技术点和知识点之JAVA集合框架.异常类.IO  写这篇文章的目的是想总结一下自己这么多年JAVA培训的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享 ...

  5. Java集合框架(常用类) JCF

    Java集合框架(常用类) JCF 为了实现某一目的或功能而预先设计好一系列封装好的具有继承关系或实现关系类的接口: 集合的由来: 特点:元素类型可以不同,集合长度可变,空间不固定: 管理集合类和接口 ...

  6. Java:集合,Collections工具类用法

    Collections工具类提供了大量针对Collection/Map的操作,总体可分为四类,都为静态(static)方法: 1. 排序操作(主要针对List接口相关) reverse(List li ...

  7. java集合框架(Collections Framework)

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  8. Java—集合框架 Collections.sort()、Comparable接口和Comparator接口

    Collentions工具类--java.util.Collections Collentions是Java集合框架中,用来操作集合对象的工具类,也是Java集合框架的成员,与List.Map和Set ...

  9. Map集合、HashMap集合、LinkedHashMap集合、Hashtable集合、Collections工具类和模拟斗地主洗牌和发牌

    1.Map集合概述和特点 * A:Map接口概述  * 查看API可以知道:          * 将键映射到值的对象          * 一个映射不能包含重复的键          * 每个键最多 ...

  10. Java容器---Arrays & Collections工具类

    1.Array & Arrays 与Collection & Collections区别 (1)Collection": 是一个接口,与其子类共同组成一个Collection ...

随机推荐

  1. Zxing二维码扫描

    源代码地址  有问题能够加QQ:312122330 之前对于Zbar的二位码扫描.到项目上线以后才发现扫描过于灵敏.导致有时候扫描到半截就启动了. 后来翻看ZXING的源代码,没有想象的复杂,复杂的地 ...

  2. 使用gradle构建Android时 版本号versionName中嵌入git提交信息

    为什么要这么做   在应用开发的版本迭代过程中,通过版本号并不能快速定位到所对应的代码,导致在后面分析问题追溯对应版本的代码时比较麻烦.   如果代码是通过git来管理的,git的commit id等 ...

  3. Windows进程通信 -- 共享内存

    享内存的方式原理就是将一份物理内存映射到不同进程各自的虚拟地址空间上,这样每个进程都可以读取同一份数据,从而实现进程通信.因为是通过内存操作实现通信,因此是一种最高效的数据交换方法. 共享内存在 Wi ...

  4. Java之内部类(1) - 为什么需要内部类

    为什么需要内部类 一般来说,内部类继承自某个类或实现某个接口,内部类的代码操作创建它的外围类的对象.所以可以认为内部类提供了某种进入其外围类的窗口. 内部类必须要回答的一个问题是:如果只是需要一个对接 ...

  5. 【Python 数据分析】pandas数据导入

    导入CSV文件数据 环境 C:\Users\Thinkpad\Desktop\Data\信息表.csv 语法 pd.read_csv(filename):从CSV文件导入数据 实现代码 import ...

  6. Tomcat日志、项目中的log4j日志、e.printStackTrace()——我的日志最后到底跑哪去了?

    1.Tomcat自带日志功能,即时你的项目中有log4j也不会影响到Tomcat自己记录日志. 2.你的项目中的log4j中的日志指定打印到什么地方(控制台或者文件),便会打印到什么地方,和Tomat ...

  7. CentOS7 升级到7.4

    2 升级CentOS7.4 自己电脑上的系统还是CentOS7.2,服务器是CentOS7.3, 打算统统升级到最新版 升级前查看 > lsb_release -a LSB Version: : ...

  8. Java包装类的常量池

     Integer a=Integer.valueOf(100); Integer b=Integer.valueOf(100); System.out.println(a==b); Double d1 ...

  9. HTML5学习笔记1 HTML5 新元素

    自1999年以后html4.0已经改变了很我,今天,在html4.01中的几个已经被废弃,这些元素在html5中已经被删除或重新定义. 为了更好地处理今天的互联网应用,html5添加了很多新元素及功能 ...

  10. Android中的UriMatcher、ContentUrist和ContentResolver

    因为Uri代表了要操作的数据,所以我们很经常需要解析Uri,并从Uri中获取数据.Android系统提供了两个用于操作Uri的工具类,分别为UriMatcher 和ContentUris .掌握它们的 ...