当前位置: 首页 > news >正文

Java 中集合的练习

练习1:随机点名器

需求:班级里有N个学生,实现随机点名器。

分析:有两种实现方式,随机生成索引和使用shuffle方法打乱元素后获取0索引处的元素。

代码实现:

public class Test1 {public static void main(String[] args) {//1.定义集合ArrayList<String> list = new ArrayList<>();//2.添加数据Collections.addAll(list,"范闲","范建","范统","杜子腾","杜琦燕","宋合泛","侯笼藤","朱益群","朱穆朗玛峰","袁明媛");//3.随机点名/* Random r = new Random();int index = r.nextInt(list.size());String name = list.get(index);System.out.println(name);*/
​//打乱Collections.shuffle(list);
​String name = list.get(0);System.out.println(name);
​
​}
}

练习2:带概率的随机

需求:班级里有N个学生。要求在随机的时候,70%的概率随机到男生,30%的概率随机到女生。

代码实现:

public class Test2 {public static void main(String[] args) {//1.创建集合ArrayList<Integer> list = new ArrayList<>();//2.添加数据Collections.addAll(list,1,1,1,1,1,1,1);Collections.addAll(list,0,0,0);//3.打乱集合中的数据Collections.shuffle(list);//4.从list集合中随机抽取0或者1Random r = new Random();int index = r.nextInt(list.size());int number = list.get(index);System.out.println(number);//5.创建两个集合分别存储男生和女生的名字ArrayList<String> boyList = new ArrayList<>();ArrayList<String> girlList = new ArrayList<>();Collections.addAll(boyList,"范闲","范建","范统","杜子腾","宋合泛","侯笼藤","朱益群","朱穆朗玛峰");Collections.addAll(girlList,"杜琦燕","袁明媛","李猜","田蜜蜜");//6.判断此时是从boyList里面抽取还是从girlList里面抽取if(number == 1){//boyListint boyIndex = r.nextInt(boyList.size());String name = boyList.get(boyIndex);System.out.println(name);}else{//girlListint girlIndex = r.nextInt(girlList.size());String name = girlList.get(girlIndex);System.out.println(name);}}
}

练习3:随机不重复

需求:班级里有N个学生,被点到的学生不会再被点到。但是如果班级中所有的学生都点完了, 需要重新开启第二轮点名。

分析:使用remove方法模拟点到的学生,并将其添加到一个新的集合中,点名结束后重新将其赋给原始集合,再次循环。

代码实现:

public class Test3 {public static void main(String[] args) {//1.定义集合ArrayList<String> list1 = new ArrayList<>();//2.添加数据Collections.addAll(list1, "范闲", "范建", "范统", "杜子腾", "杜琦燕", "宋合泛", "侯笼藤", "朱益群", "朱穆朗玛峰", "袁明媛");//创建一个临时的集合,用来存已经被点到学生的名字ArrayList<String> list2 = new ArrayList<>();//外循环:表示轮数for (int i = 1; i <= 10; i++) {System.out.println("=========第" + i + "轮点名开始了======================");//3.获取集合的长度int count = list1.size();//4.随机点名Random r = new Random();//内循环:每一轮中随机循环抽取的过程for (int j = 0; j < count; j++) {int index = r.nextInt(list1.size());String name = list1.remove(index);list2.add(name);System.out.println(name);}//此时表示一轮点名结束//list1 空了 list2 10个学生的名字list1.addAll(list2);list2.clear();}}
}

练习4:集合的嵌套

需求:定义一个Map集合,键用表示省份名称province,值表示市city,但是市会有多个。添加完毕后,遍历结果格式如下:

江苏省 = 南京市,扬州市,苏州市,无锡市,常州市

湖北省 = 武汉市,孝感市,十堰市,宜昌市,鄂州市

public class Test4 {public static void main(String[] args) {//1.创建Map集合HashMap<String, ArrayList<String>> hm = new HashMap<>();//2.创建单列集合存储市ArrayList<String> city1 = new ArrayList<>();city1.add("南京市");city1.add("扬州市");city1.add("苏州市");city1.add("无锡市");city1.add("常州市");ArrayList<String> city2 = new ArrayList<>();city2.add("武汉市");city2.add("孝感市");city2.add("十堰市");city2.add("宜昌市");city2.add("鄂州市");ArrayList<String> city3 = new ArrayList<>();city3.add("石家庄市");city3.add("唐山市");city3.add("邢台市");city3.add("保定市");city3.add("张家口市");//3.把省份和多个市添加到map集合hm.put("江苏省",city1);hm.put("湖北省",city2);hm.put("河北省",city3);Set<Map.Entry<String, ArrayList<String>>> entries = hm.entrySet();for (Map.Entry<String, ArrayList<String>> entry : entries) {//entry依次表示每一个键值对对象String key = entry.getKey();ArrayList<String> value = entry.getValue();StringJoiner sj = new StringJoiner(", ","","");for (String city : value) {sj.add(city);}System.out.println(key + " = " + sj);}}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 跟李沐学AI:池化层
  • shell-awk文本处理工具
  • 边界网关IPSEC VPN实验
  • Godot游戏制作 05收集物品
  • 常用的网络爬虫工具推荐
  • vue网络请求
  • <设计模式> 单例模式
  • 力扣94题(java语言)
  • wpf中轮询显示图片
  • Jacoco 单元测试配置
  • 设计模式14-享元模式
  • 江科大/江协科技 STM32学习笔记P13
  • IP地址在后端怎么存才好?
  • Java项目中整合多个pdf合并为一个pdf
  • 【Java版数据结构】初识泛型
  • Date型的使用
  • Docker容器管理
  • dva中组件的懒加载
  • HTTP中的ETag在移动客户端的应用
  • Idea+maven+scala构建包并在spark on yarn 运行
  • Java-详解HashMap
  • JAVA之继承和多态
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • ViewService——一种保证客户端与服务端同步的方法
  • Vue 重置组件到初始状态
  • 记录:CentOS7.2配置LNMP环境记录
  • 如何进阶一名有竞争力的程序员?
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 终端用户监控:真实用户监控还是模拟监控?
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • ionic入门之数据绑定显示-1
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (02)Unity使用在线AI大模型(调用Python)
  • (c语言)strcpy函数用法
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (第61天)多租户架构(CDB/PDB)
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (五)activiti-modeler 编辑器初步优化
  • (五)Python 垃圾回收机制
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .net打印*三角形
  • .net项目IIS、VS 附加进程调试
  • ??在JSP中,java和JavaScript如何交互?
  • [2]十道算法题【Java实现】
  • [20161101]rman备份与数据文件变化7.txt
  • [Algorithm][综合训练][体育课测验(二)][合唱队形][宵暗的妖怪]详细讲解
  • [Bzoj4722]由乃(线段树好题)(倍增处理模数小快速幂)
  • [C#] 我的log4net使用手册