Collections概述和使用
-
Collections类的作用
是针对集合操作的工具类
-
Collections类常用方法
public class CollectionsDemo1 {
public static void main(String[] args) {
List<Integer> list=new ArrayList<Integer>();
list.add(20);
list.add(30);
list.add(12);
list.add(40);
Collections.sort(list);
Collections.reverse(list);
Collections.shuffle(list);
System.out.println(list);
}
}
ArrayList集合存储学生并排序【应用】
-
案例需求
ArrayList存储学生对象,使用Collections对ArrayList进行排序
要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序 -
代码实现
学生类
package com.itheima_02;
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
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;
}
}
测试类
package com.itheima_02;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class ArrayListDemo {
public static void main(String[] args) {
ArrayList<Student> al=new ArrayList<Student>();
Student s1=new Student("weixing",20);
Student s2=new Student("hudanmeng",19);
Student s3=new Student("limengdi",20);
al.add(s1);
al.add(s2);
al.add(s3);
//使用Collections对ArrayList集合排序
//sort(list<T> list,Comparator<? super T> c)
Collections.sort(al, new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
int num=s1.getAge()- s2.getAge();
int num2=num==0?s1.getName().compareTo(s2.getName()):num;
return num2;
}
});
//遍历集合
for(Student s:al){
System.out.println(s.getName()+","+s.getAge());
}
}
}
案例斗地主
-
案例需求
通过程序实现斗地主过程中的洗牌,发牌和看牌。要求:对牌进行排序
-
思路
1.创建HashMap,键是编号,值是牌
2.创建ArrayList,存储编号
3.创建花色数组和点数数组
4.从0开始往HashMap里面存储编号,并存储对应的牌。同时往ArrayList里面存储编号
5.洗牌(洗的是编号),用Collections的shuffle()方法实现
6.发牌(发的也是编号,为了保证编号是排序的,创建TreeSet集合接收)
7.定义方法看牌(遍历TreeSet集合,获取编号,到HashMap集合找对应牌)
8.调用看牌方法
public class PokerDemo2 {
public static void main(String[] args) {
//创建HashMap,键是编号,值是牌
HashMap<Integer,String> hm=new HashMap<Integer,String>();
//创建ArrayList,存储编号
ArrayList<Integer> array=new ArrayList<Integer>();
//创建花色数组和点数组
String[] colors={"♦","♣","♥","♠"};
String[] numbers={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
//从0开始往HashMap里面存储编号,并存储对应的牌,同时往ArrayList里面存储编号
int index=0;
for(String number:numbers){
for(String color:colors){
hm.put(index,color+number);
array.add(index);
index++;
}
}
hm.put(index,"小王");
array.add(index);
index++;
hm.put(index,"大王");
array.add(index);
//洗牌(洗的是编号)
Collections.shuffle(array);
//发牌(发的也是编号,为了保证编号是排序的,创建TreeSet集合接收)
TreeSet<Integer> hdmSet=new TreeSet<Integer>();
TreeSet<Integer> wxSet=new TreeSet<Integer>();
TreeSet<Integer> hySet=new TreeSet<Integer>();
TreeSet<Integer> dpSet=new TreeSet<Integer>();
for(int i=0;i<array.size();i++){
int x=array.get(i);
if(i>=array.size()-3){
dpSet.add(x);
}else if(i%3==0){
hdmSet.add(x);
}else if(i%3==1){
wxSet.add(x);
}else if(i%3==2){
hySet.add(x);
}
}
lookPoker("胡丹梦",hdmSet,hm);
lookPoker("魏幸",wxSet,hm);
lookPoker("胡丫",hySet,hm);
lookPoker("底牌",dpSet,hm);
}
//定义方法看牌(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌)
public static void lookPoker(String name,TreeSet<Integer> ts,HashMap<Integer,String> hm){
System.out.println(name+"的牌是:");
for(Integer key:ts){
String poker=hm.get(key);
System.out.print(poker+" ");
}
System.out.println();
}
}