← 返回首页
JavaSE系列教程(四十八)
发表时间:2020-02-01 14:42:18
讲解集合框架之Collections工具类

java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。

Collections常用静态方法如下:

方法名字 说明
sort(Collection c) 实现集合排序
reverse() 反转集合中元素的顺序
shuffle(Collection c) 对集合进行随机排序
fill(List list,Object o) 用对象o替换集合list中的所有元素
min(Collection c) 找出集合中最小的元素
max(Collection c) 找出集合中最大的元素
rotate(List list,int m) 移动列表中的元素,负数向左移动,正数向右移动
binarySearch(Collection c,Object obj) 查找指定集合中的元素,返回所查找元素的索引
swap(List list,int i,int j) 交换集合中指定元素索引的位置
emptyList 返回一个空序列

通过一个例子理解以上方法。

public class CollectionsDemo {

    public static void main(String[] args) {

        String[] fruits = {"banana","grape","apple","pear","apple","watermelon"};
        List list = Arrays.asList(fruits);

        Collections.sort(list);
        System.out.println(list);
        Collections.reverse(list);
        System.out.println(list);
        Collections.shuffle(list); //随机打乱次序。
        System.out.println(list);

        Collections.rotate(list,1);
        System.out.println(list);

        System.out.println(Collections.min(list));
        System.out.println(Collections.max(list));
        //注意:使用二分查找算法必须先排序
        Collections.sort(list);  
        System.out.println(Collections.binarySearch(list, "apple"));
        Collections.fill(list,"水果");
        System.out.println(list);

    }
}

运行结果:
[apple, apple, banana, grape, pear, watermelon]
[watermelon, pear, grape, banana, apple, apple]
[watermelon, apple, grape, apple, pear, banana]
[banana, watermelon, apple, grape, apple, pear]
apple
watermelon
2
[水果, 水果, 水果, 水果, 水果, 水果]

综合实例: 使用Collections工具类模拟实现一个发牌算法,将一副扑克牌去除大小王,一共52张牌随机发给四个玩家手中,实现代码如下:

public class PokerDemo {

    public static void main(String[] args) {

        String[] types = {"红桃","黑桃","方片","梅花"};
        String[] numbers = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};

        List poker = new ArrayList();

        //初始化一副新扑克牌
        for(int i=0;i<types.length;i++){
            for(int j=0;j<numbers.length;j++){
                poker.add(types[i]+numbers[j]);
            }
        }

        System.out.println(poker);
        Collections.shuffle(poker);

        System.out.println("---------------洗完牌之后--------------");
        System.out.println(poker);

        //分别生成四个子集合,随机发个四个玩家。
        for(int i=0;i<4;i++){
            List subList = poker.subList(i*13,i*13+13);

            System.out.println("第" + (i + 1) + "个玩家手中的牌是:" + subList);
        }
    }
}

运行结果如下:
[红桃A, 红桃2, 红桃3, 红桃4, 红桃5, 红桃6, 红桃7, 红桃8, 红桃9, 红桃10, 红桃J, 红桃Q, 红桃K, 黑桃A, 黑桃2, 黑桃3, 黑桃4, 黑桃5, 黑桃6, 黑桃7, 黑桃8, 黑桃9, 黑桃10, 黑桃J, 黑桃Q, 黑桃K, 方片A, 方片2, 方片3, 方片4, 方片5, 方片6, 方片7, 方片8, 方片9, 方片10, 方片J, 方片Q, 方片K, 梅花A, 梅花2, 梅花3, 梅花4, 梅花5, 梅花6, 梅花7, 梅花8, 梅花9, 梅花10, 梅花J, 梅花Q, 梅花K]
---------------洗完牌之后--------------
[黑桃10, 方片2, 黑桃9, 梅花4, 梅花6, 方片5, 梅花8, 黑桃7, 方片4, 黑桃2, 黑桃A, 红桃6, 梅花9, 梅花Q, 梅花K, 红桃5, 黑桃K, 黑桃5, 方片Q, 梅花A, 红桃3, 梅花5, 黑桃8, 方片7, 红桃7, 红桃2, 红桃J, 方片9, 红桃9, 梅花2, 黑桃4, 黑桃Q, 梅花7, 红桃10, 方片J, 方片8, 方片A, 红桃Q, 方片K, 方片10, 方片6, 黑桃6, 黑桃3, 红桃4, 梅花J, 方片3, 梅花10, 梅花3, 红桃8, 黑桃J, 红桃A, 红桃K]
第1个玩家手中的牌是:[黑桃10, 方片2, 黑桃9, 梅花4, 梅花6, 方片5, 梅花8, 黑桃7, 方片4, 黑桃2, 黑桃A, 红桃6, 梅花9]
第2个玩家手中的牌是:[梅花Q, 梅花K, 红桃5, 黑桃K, 黑桃5, 方片Q, 梅花A, 红桃3, 梅花5, 黑桃8, 方片7, 红桃7, 红桃2]
第3个玩家手中的牌是:[红桃J, 方片9, 红桃9, 梅花2, 黑桃4, 黑桃Q, 梅花7, 红桃10, 方片J, 方片8, 方片A, 红桃Q, 方片K]
第4个玩家手中的牌是:[方片10, 方片6, 黑桃6, 黑桃3, 红桃4, 梅花J, 方片3, 梅花10, 梅花3, 红桃8, 黑桃J, 红桃A, 红桃K]