Map类
案例
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;
//案例:统计字符串中每个字符出现的次数
/*
需求:键盘输入一个字符串,要求统计字符串中每个字符串出现的次数/
举例:键盘输入"aababcabcdabcde" 在控制台输出:"a(5)b(4)c(3)d(2)e(1)"
*/
public class Test {
public static void main(String[] args) {
//创建输入器
Scanner scanner=new Scanner(System.in);
System.out.println("请输入字符串");
String s=new String();
if (scanner.hasNext()){
s=scanner.next();
}
scanner.close();
//创建一个HashMap集合
TreeMap hm=new TreeMap<>();
//遍历字符串
for (int i=0;i characters = hm.keySet();
for (Character c:characters){
System.out.println(c+"("+hm.get(c)+")");
}
}
}
Collections类
Collections类的概述
import java.util.ArrayList;
import java.util.Collections;
import java.util.stream.Collectors;
//Collections是一个类,里面有针对集合操作的静态方法
/*
1.针对集合操作的工具类
2.Collections类的常用方法
- public static > void sort(List list):给指定的列表按升序排序
- public static void reverse(List list):反转指定列表中元素的顺序
- public static void shuffle(List list):使用默认的随机源随机排列指定的列表
*/
public class Test {
public static void main(String[] args) {
//创建一个集合对象
ArrayList array=new ArrayList<>();
//添加元素
array.add("a");
array.add("b");
array.add("d");
array.add("c");
array.add("a");
Collections.sort(array);
Collections.reverse(array);
Collections.shuffle(array);
System.out.println(array);
}
}
案例1
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
//案例:ArrayList存储学生对象并排序
//需求:ArrayList存储学生对象,使用Collections对ArrayList进行排序
//要求:按照年龄大小从小到大排序,年龄相同时,按照姓名的字母顺序排序
public class Test {
public static void main(String[] args) {
//创建集合对象
ArrayList arrayList=new ArrayList<>();
//创建学生对象
Student s1=new Student("one",1);
Student s2=new Student("four",4);
Student s3=new Student("three",3);
Student s4=new Student("two",2);
Student s5=new Student("Atwo",2);
arrayList.add(s1);
arrayList.add(s2);
arrayList.add(s3);
arrayList.add(s4);
arrayList.add(s5);
//使用Collections类进行排序
Collections.sort(arrayList, new Comparator() {
@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:arrayList){
System.out.println(s.getName()+","+s.getAge());
}
}
}
/*
//自定义学生类
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;
}
}
*/
案例2(模拟斗地主)
import java.util.ArrayList;
import java.util.Collections;
/*
需求:
通过程序实现斗地主过程中的洗牌,发牌和看牌
思路:
1.创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现
2.往牌盒里面装牌,也就是给集合添加元素
3.洗牌,把牌打乱,用Collections中的shuffle()方法实现
4.发牌,也就是遍历集合,给三个玩家发牌
5.看牌,也就是三个玩家遍历自己的牌
*/
public class Test {
public static void main(String[] args) {
//创建一套牌的集合
ArrayList poker=new ArrayList<>();
/*
♦2,♦3...♦A
♠2...
♥2...
♣2...
*/
//花色数组
String[] colors={"♦","♠","♥","♣"};
//点数数组
String[] points={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
//把牌放入牌盒,添加进集合
for (String color:colors){
for (String point:points){
poker.add(color+point);
}
}
poker.add("大王");
poker.add("小王");
//创建三个玩家
ArrayList xjyPoker=new ArrayList<>();
ArrayList ysjPoker=new ArrayList<>();
ArrayList bmPoker=new ArrayList<>();
ArrayList dpPoker=new ArrayList<>();//底牌
//洗牌,把牌打乱,用Collections中的shuffle()方法实现
Collections.shuffle(poker);
//发牌,也就是遍历集合,给三个玩家发牌
for (int i=0;i=poker.size()-3){
dpPoker.add(s);
}else if (i%3==0){
xjyPoker.add(s);
}else if (i%3==1){
ysjPoker.add(s);
}else if (i%3==2){
bmPoker.add(s);
}
}
Collections.sort(xjyPoker);
Collections.shuffle(ysjPoker);
Collections.shuffle(bmPoker);
//看牌,也就是三个玩家遍历自己的牌
lookPoker("谢佳妤",xjyPoker);
lookPoker("杨胜杰",ysjPoker);
lookPoker("小表妹",bmPoker);
lookPoker("底牌",dpPoker);
}
//看牌的方法
public static void lookPoker(String name,ArrayList arrayList){
System.out.print(name+"的牌是:");
for (String s:arrayList){
System.out.print(s+" ");
}
System.out.println();
}
}
案例3(模拟斗地主升级版)
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;
//模拟斗地主升级版
//需求:通过程序实现斗地主过程中的洗牌,发牌和看牌
//要求:对牌进行排序
public class Test {
public static void main(String[] args) {
//创建一个HashMap集合 键为序号,值为牌
HashMap hm=new HashMap<>();
//花色数组
String[] colors={"♦","♠","♥","♣"};
//点数数组
String[] points={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
//把牌放入牌盒,添加进集合
int i=0;
for (String point:points){
for (String color:colors){
hm.put(i++,color+point);
}
}
hm.put(i++,"大王");
hm.put(i,"小王");
//创建一个序号数组
ArrayList arrayList=new ArrayList<>();
for (int i1=0;i1<54;i1++){
arrayList.add(i1);
}
//用TreeSet创建三个玩家数组,自然排序
TreeSet xjySet=new TreeSet<>();
TreeSet ysjSet=new TreeSet<>();
TreeSet xbmSet=new TreeSet<>();
TreeSet dpSet=new TreeSet<>();
//洗牌,打乱arrayList的元素顺序
Collections.shuffle(arrayList);
//把牌发给玩家
for (int j=0;j=arrayList.size()-3){
dpSet.add(integer);
}else if (j%3==0){
xjySet.add(integer);
}else if (j%3==1){
ysjSet.add(integer);
}else if (j%3==2){
xbmSet.add(integer);
}
}
//玩家看牌
lookPoker("谢佳妤",xjySet,hm);
lookPoker("杨胜杰",ysjSet,hm);
lookPoker("小表妹",xbmSet,hm);
lookPoker("底牌",dpSet,hm);
}
//看牌的方法
public static void lookPoker(String name,TreeSet treeSet,HashMap hashMap){
System.out.print(name+"的牌是");
for (int k:treeSet){
System.out.print(hashMap.get(k)+" ");
}
System.out.println();
}
}