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]