集合练习题
Posted 猪八戒1.0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集合练习题相关的知识,希望对你有一定的参考价值。
模拟斗地主
挑战介绍
扑克牌都是由 "♠","♥","♣","♦" 4 种花色和 "2,3,4,···,A,J,Q,K," 13 种数字组合形成的 52 张正牌以及 "大王" 和 "小王" 两张副牌组成。本次挑战将结合本章所学知识模拟斗地主的洗牌与发牌过程。具体规则为:使用 54 张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人 17 张牌,最后三张留作底牌。
知识点
- List 接口
- 泛型
- 工具类
挑战内容
-
准备牌:
定义一个集合,存储 54 张牌。
定义一个集合,存储四种花色 "♠","♥","♣","♦"。
定义一个集合,存储 13 个序号。
可以使用花色集合与数字集合嵌套迭代完成每张牌的组装。
-
洗牌:
牌由
Collections
类的shuffle()
方法进行随机排序。 -
发牌:
定义四个集合 存储三个玩家的牌和底牌。
-
看牌:
直接打印玩家和底牌集合。
提示: 循环遍历集合中的每一个元素,判断索引是否大于 51 ,小于 51 的对 3 取模运算,结果 0、1、2 分别对应三个玩家,当元素索引大于 51 的时候就将此牌添加到底牌集合中。
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
public class Poker
public static void main(String[] args)
ArrayList<String> array = new ArrayList<String>();
// 花色数组
String[] colors = "♥", "♣", "♦", "♠" ;
// 定义点数数组
String[] numbers = "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A" ;
for (String col : colors)
for (String num : numbers)
array.add(col + num);
// 添加大小牌
array.add("大王");
array.add("小王");
// System.out.println(array);
// 洗牌
Collections.shuffle(array);
// System.out.println(array);
// 给三个玩家发牌
ArrayList<String> player1 = new ArrayList<>();
ArrayList<String> player2 = new ArrayList<>();
ArrayList<String> player3 = new ArrayList<>();
ArrayList<String> dipai = new ArrayList<>();
for (int i = 0; i < array.size(); i++)
String poker = array.get(i);
if (i >= array.size() - 3)
dipai.add(poker);
else if (i % 3 == 0)
player1.add(poker);
else if (i % 3 == 1)
player2.add(poker);
else if (i % 3 == 2)
player3.add(poker);
// 看牌
look("玩家: ", player1);
look("玩家2: ", player2);
look("玩家3: ", player3);
look("底牌: ", dipai);
//定义看牌的方法
public static void look(String player, ArrayList<String> arr)
System.out.print(player);
// for (String s : arr)
// System.out.print(s + " ");
//
System.out.println(arr);
挑战介绍
蓝桥班有 40 个学生,学号为 180201-180240, 全部参加 Java 集合阶段检测,给出所有同学的成绩 (可随机产生,范围为 50-100),请编写程序将本班 各位同学成绩从高往低排序打印输出。
知识点
- List 接口
- ArrayList 类
- Collections 类
- Comparator 接口
挑战内容
某班有 40 个学生,学号为 180201-180240, 全部参加 Java 集合阶段检测,给出所有同学的成绩 (可随机产生,范围为 50-100),请编写程序将本班 各位同学成绩从高往低排序打印输出。
注:成绩相同时学号较小的优先打印。
要求:打印的信息包含学号、姓名(姓名统一为 “同学 J ”,J 的取值范围为 1 - 40)和成绩。
挑战要求
-
创建一个
Student
类,该类具有 int 类型的学号 id、String 类型的姓名 name、int 类型的成绩 score。 -
需要在
Student
类中重写toString()
方法,格式如下:"学号:" + id + ", 姓名:" + name + ", 成绩:" + score
-
创建一个
Results
类,该类为运行类,具有一个公共的静态的集合 data,该集合的泛型为Student
类型用于储存班级内的学生对象。 -
在
Results
类中创建一个公共的静态的initData()
方法,该方法用于初始化集合 data 存入 40 个学生对象,其中学生的 id 属性从 180201 递增至 180240,name 属性为 J1 至 J40 递增,score 属性为 50 + 50 内的随机数。 -
在
Results
类中创建一个公共的静态的adjust()
方法,该方法用于对集合进行排序,排序规则为按照成绩从高到低。若成绩相同按照学号从小到大打印。 -
在
Results
类中创建一个公共的静态的print()
方法,该方法用于打印集合内的学生对象。 -
输出格式请参照「挑战运行效果」,创建的文件名、方法名请按要求书写,为避免后台测试出现问题,请不要擅自修改输出格式。
package org.lanqiao.main;
import org.lanqiao.entity.*;
import java.util.*;
public class Results
public static List<Student> data = new ArrayList<Student>();
public static void initData()
Random random = new Random();
int k;
for (int i = 0; i < 40; i++)
k = i + 1;
Student student = new Student(180201 + i, ("同学" + k), (random.nextInt(50) + 50));
data.add(student);
public static void adjust()
Collections.sort(data, new GradeComparator());
public static void print()
for (int i = 0; i < data.size(); i++)
Student s = data.get(i);
System.out.println(s);
//定义一个成绩比较器
static class GradeComparator implements Comparator
@Override
public int compare(Object o1, Object o2)
Student O1 = (Student) o1;
Student O2 = (Student) o2;
if(O2.score == O1.score)
return O1.id-O2.id;
return O2.score - O1.score;
public static void main(String[] args)
Results results = new Results();
results.initData();
results.adjust();
results.print();
package org.lanqiao.entity;
public class Student
public int id;
String name;
public int score;
@Override
public String toString()
return "学号:" + id + ", 姓名:" + name + ", 成绩:" + score;
public Student()
public Student(int id, String name, int score)
this.id = id;
this.name = name;
this.score = score;
public int getId()
return id;
public void setId(int id)
this.id = id;
public String getName()
return name;
public void setName(String name)
this.name = name;
public int getScore()
return score;
public void setScore(int score)
this.score = score;
模拟一个图书馆
挑战介绍
HashSet 是 Set 接口的典型实现,大多数时候使用 Set 集合时就是使用这个实现类。HashSet 按 Hash 算法来存储集合中的元素,因此具有很好的存取和查找性能。本次挑战将模拟一个图书管理系统,对图书对象进行增加、删除、查询。
知识点
- Java 集合
挑战内容
使用 HashSet 作为储存容器,模拟一个图书管理系统,该系统可以对容器内的图书进行增加、删除、查询。
- 定义图书类 Book,具有属性账号 id,书名 name、作者 author 和价格 price,在创建图书对象时要求通过构造器进行创建,一次性将四个属性全部赋值,要求账户属性是 int 型,名称是 String 型,作者是 String 型,价格是 double,请合理进行封装。
- 在 Book 类添加 toString 方法,要求返回图书信息字符串,使用制表符隔开各信息。
- 要求定义一个图书馆 Library 类,在图书馆类中添加一个 HashSet 集合用于保存多本图书。
- 在图书馆类中要求具有以下方法:
addBook()
、deleteBook()
、selectBook()
。分别能够对图书进行增加、删除、查询。 addBook()
方法的输入规则参照「测试验证」中的截图。deleteBook()
删除方法通过输入一个图书 id 进行删除指定图书,删除完成后输出“删除成功!”字样。selectBook()
通过输出所有图书对象的toString()
方法输出图书信息
package main;
import entity.Book;
import java.util.*;
import java.util.Iterator;
import static java.lang.System.exit;
public class Library
static Set<Book> set=new HashSet<Book>() ;
static Scanner input = new Scanner(System.in);
public static void addBook()
System.out.println("请输入图书id:");
int id = input.nextInt();
System.out.println("请输入书名:");
String name = input.next();
System.out.println("请输入作者名");
String author = input.next();
System.out.println("请输入价格");
double price = input.nextDouble();
Book book = new Book(id, name, author, price);
if ( set.add(book))
System.out.println("添加成功!");
else
System.out.println("添加失败");
public static void deleteBook()
System.out.println("请输入要删除的图书id:");
int id1=input.nextInt();
for (Book book1:set)
if (id1== book1.getId())
set.remove(book1);
System.out.println("删除成功!");
public static void selectBook()
System.out.println("以下为所有图书信息!");
Iterator it=set.iterator();
//遍历迭代器并输出元素
while(it.hasNext())
//若不重载Cat类中toString()方法 输出的是地址
System.out.println(it.next());
public static void menu()
System.out.println("------欢迎到蓝桥图书馆------");
System.out.println("1.添加图书");
System.out.println("2.查询图书");
System.out.println("3.删除图书");
System.out.println("4.退出程序");
System.out.println("请输入选项:");
public static void main(String[] args)
while (true)
menu();
int select = input.nextInt();
switch (select)
case 1:
addBook();
break;
case 2:
selectBook();
break;
case 3:
deleteBook();
break;
case 4:
System.out.println("退出成功");
exit(-1);
package entity;
import java.util.Objects;
public class Book
int id;
String name;
String author;
double price;
public Book(int id, String name, String author, double price)
this.id = id;
this.name = name;
this.author = author;
this.price = price;
@Override
public String toString()
return "Book" +
"id=" + id +
", name='" + name + '\\'' +
", author='" + author + '\\'' +
", price=" + price +
'';
public int getId()
return id;
public void setId(int id)
this.id = id;
public String getName()
return name;
public void setName(String name)
this.name = name;
public String getAuthor()
return author;
public void setAuthor(String author)
this.author = author;
public double getPrice()
return price;
public void setPrice(double price)
this.price = price;
以上是关于集合练习题的主要内容,如果未能解决你的问题,请参考以下文章