(38)Java学习笔记——集合框架 / Collections工具类

Collections工具类

针对集合操作的工具类

有对集合进行排序和二分查找的方法


Collection 是单列集合的顶层接口,有子接口List 和 Set 


Collections 成员方法

public static <T> void sort (List < T> list)   //排序,默认排序

public static <T> int binarySearch(List<?> list T key)   //二分查找

public static <T> T max(Collection<?> coll)    //最大值

public static void reverse(List<?>list)   //反转

public static void shuffle(List<?>list)   //随机置换

范例01:

package cn.itcast_01;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/*
 * Collections
 * 常用成员方法
public static <T> void sort (List < T> list)	  	//排序,默认排序
public static <T> int binarySearch(List<?> list T key)   //二分查找
public static <T> T max(Collection<?> coll)    //最大值
public static void reverse(List<?>list)   //反转
public static void shuffle(List<?>list)   //随机置换
 */
public class CollectionsDemo {
	public static void main(String[] args) {
		//创建集合对象
		List<Integer> list = new ArrayList<Integer>();
		
		//添加元素
		list.add(30);
		list.add(20);
		list.add(50);
		list.add(10);
		list.add(40);
//		System.out.println(list);	//[30, 20, 50, 10, 40]
		
		//public static <T> void sort (List < T> list)	  	//排序,默认排序
		Collections.sort(list);
//		System.out.println(list);	//[10, 20, 30, 40, 50]
		
		//public static <T> int binarySearch(List<?> list T key)   //二分查找
		int i = Collections.binarySearch(list, 30);
		System.out.println(i);	//返回结果:2
		
		//public static <T> T max(Collection<?> coll)    //最大值
		System.out.println(Collections.max(list));  //返回结果:50
		
		//public static void reverse(List<?>list)   //反转
		Collections.reverse(list);
		System.out.println(list);	//[50, 40, 30, 20, 10]
		
		//public static void shuffle(List<?>list)   //随机置换
		Collections.shuffle(list);
		System.out.println(list);
	
	}
}


范例02:对自定义对象的排序

package cn.itcast_01;
/*
 * Student
 */
public class Student implements Comparable<Student>{	//实现Comparable接口
	private String name;
	private int age;
	public Student() {
		super();

	}
	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public int compareTo(Student s) {	重写Comparable接口compareTo()方法

		int num = this.age - s.age;
		int num2 = num ==0 ? this.name.compareTo(s.name):num;
		return num2;
		
	}
	
}

package cn.itcast_01;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/*
 * Collections对自定义对象的排序
 * Coleections可以对ArrayList存储基本包装类的元素排序
 */
public class CollectionsDemo02 {
	public static void main(String[] args) {
		//创建集合对象
		List<Student> list = new ArrayList<Student>();
		
		//创建学生对象
		Student s1 = new Student("唐僧",25);
		Student s2 = new Student("孙悟空",600);
		Student s3 = new Student("猪八戒",300);
		Student s4 = new Student("沙僧",150);
		
		//添加对象
		list.add(s1);
		list.add(s2);
		list.add(s3);
		list.add(s4);
		
		//自然排序
		Collections.sort(list);	
		
		
		//比较器排序  //同时有自然排序和比较器排序的时候,以比较器排序为主。
		Collections.sort(list, new Comparator<Student>(){

			@Override
			public int compare(Student s1, Student s2) {
				int num = s2.getAge()-s1.getAge();
				int num2 = num ==0 ? s1.getName().compareTo(s2.getName()):num;
				return num2;
			}
			
		});

		//遍历
		for (Student s : list){
			System.out.println(s.getName()+"---"+s.getAge());
		}
	}
}

练习01:模拟斗地主洗牌和发牌

package cn.itcast_02;

import java.util.ArrayList;
import java.util.Collections;

/*
 * 模拟斗地主洗牌和发牌
 * 思路:
 * A / 创建一个牌盒(集合)
 * B / 装牌
 * C / 洗牌
 * D / 发牌
 * E / 看牌
 * 
 */
public class CollectionsTest_01 {
	public static void main(String[] args) {
		//创建牌合
		ArrayList<String> array = new ArrayList<String>();
		
		//装牌
		//黑桃A,黑桃2,黑桃3...
		//红桃A....
		//梅花A....
		//方块A....
		//定义一个花色数组
		String[] colors = {"♠","♥","♣","♦"};
		//定义一个点数数组
		String[] numbers = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
		
		//拼接
		for (String color : colors){
			for (String number : numbers){
				array.add(color.concat(number));
			}
		}
		array.add("大王");
		array.add("小王");
		
		System.out.println(array);
		
		//洗牌
		Collections.shuffle(array);
		System.out.println(array);
		
		//发牌 (定义三个玩家)
		ArrayList<String> fengQingYang = new ArrayList<String>();
		ArrayList<String> zhouXingChi = new ArrayList<String>();
		ArrayList<String> liuYi = new ArrayList<String>();
		ArrayList<String> dipai = new ArrayList<String>();
		
		for(int x = 0 ; x<array.size();x++){
			if (x>=array.size()-3){
				dipai.add(array.get(x));
			}
				else if (x%3==0){
					fengQingYang.add(array.get(x));
				}
				else if (x%3 ==1){
					zhouXingChi.add(array.get(x));
				}
				else if (x%3==2){
					liuYi.add(array.get(x));
				}

		}
		//调方法各人看牌
		lookPoker("风清扬",fengQingYang);
		lookPoker("周星驰",zhouXingChi);
		lookPoker("刘毅",liuYi);
		lookPoker("底牌",dipai);
	
	}
	
	//写个看牌的功能
	public static void lookPoker(String name,ArrayList<String> array){
		System.out.println(name+"的牌是:");
		for (String s : array){
			System.out.print(s+" ");
		}
		System.out.println();
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值