Java集合框架:Collections工具类

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

时间: 2024-10-06 08:05:00

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

【JAVA集合框架之工具类】

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

Java:集合框架的工具类

集合框架的工具类 Arrays:里面都是静态方法,直接用来对各种集合进行操作的公有方法. Collections:里面都是静态方法,直接用来对各种集合进行操作的公有方法. 包括: 1.asList将数组变成list集合: static <T> List<T> asList(T... a) 返回一个受指定数组支持的固定大小的列表. //例子1: import java.util.*; class ArraysTest { public static void sop(Object o

集合框架的工具类

Array —将数组转为其他形式   Arrays:集合框架的工具类,里面的方法都是静态的. (1) Arrays.toString(arr)  将数组转为字符串. (2) Arrays.asList(arr)     将数组转为List集合. 好处:可以使用集合的方法操作数组中的元素.注意:数组的长度是固定的,所以对于集合的增删方法是不可以使用的.否则会发生异常. public class ArraysDemo { public static void main(String[] args)

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

Collentions工具类--java.util.Collections Collentions是Java集合框架中,用来操作集合对象的工具类,也是Java集合框架的成员,与List.Map和Set是并列的. Collections.sort() 排序方法,实现对List对象中的元素进行排序. package com.test.collection; import java.util.ArrayList; import java.util.Collections; import java.ut

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

1.Map集合概述和特点 * A:Map接口概述  * 查看API可以知道:  * 将键映射到值的对象  * 一个映射不能包含重复的键  * 每个键最多只能映射到一个值 * B:Map接口和Collection接口的不同  * Map是双列的,Collection是单列的  * Map的键唯一,Collection的子体系Set是唯一的  * Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构是针对元素有效 2.Map集合的功能概述 * A:Map集合的功能概述  *

Java容器---Arrays &amp; Collections工具类

1.Array & Arrays 与Collection & Collections区别 (1)Collection": 是一个接口,与其子类共同组成一个Collection集合框架: Collections: 是一个类,一个服务于集合的工具类, 提供一系列静态方法实现对各种集合的搜索.排序.线程安全化等操作. (2)Array:         提供了动态创建和访问 Java 数组的方法: Arrays:        用于操作数组的工具类,里面都是操作数组的静态方法.其中一个

java 18 - 10 Collections工具类的常用方法

Collections:是针对集合进行操作的工具类,都是静态方法. 要知道的方法 A:public static <T> void sort(List<T> list):排序 默认情况下是自然顺序. B:public static <T> int binarySearch(List<?> list,T key):二分查找 C:public static <T> T max(Collection<?> coll):最大值 D:publi

Java:集合,Collections工具类用法

参考: http://www.cnblogs.com/nayitian/p/3269585.html public static void main(String[] args) { // TODO Auto-generated method stub List<Integer> pokerList = new ArrayList<Integer>(); pokerList.add(13); pokerList.add(14); pokerList.add(3); System.o

Java集合框架之LinkedList类

ArrayList用数组作为其保存元素的数据结构,而LinkedList采用的是链表的数据结构.而ArrayList和LinkedList都是线性表list.但LinkedList并不具备随机访问能力,而ArrayList拥有. 对于链表集合,首先(1)我们使用API里现成的LinkedList类来进行一些分析,之后(2)我们再用自身的java代码实现链表及其LinkedList中相对应的方法. (1)现成API接口的分析使用 定义如下,与ArrayList类似. LinkedList<Stri

Java集合框架之ArrayList类

ArrayList是一个泛型数据结构,即对象/引用类型是在<E>里进行确定的(E中定义的必须是对象/引用).例如,定义一个字符串类型的ArrayList为如下格式: ArrayList<String> test = new ArrayList<String>(); 我们可以看出,ArrayList<String>被看成了一个整体. 下面我们看一个简单的例子.代码如下: import java.util.ArrayList; public class Arra