Java之Collections的综合小练习

3. 综合练习

练习1:随机点名器

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

代码实现:

java 复制代码
public class Test1 {
    public static void main(String[] args) {
        /* 班级里有N个学生,学生属性:姓名,年龄,性别。
        实现随机点名器。*/
​
​
        //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%的概率随机到女生

代码实现:

java 复制代码
public class Test2 {
    public static void main(String[] args) {
        /* 班级里有N个学生
        要求:
        70%的概率随机到男生
        30%的概率随机到女生
​
        "范闲","范建","范统","杜子腾","宋合泛","侯笼藤","朱益群","朱穆朗玛峰",
        "杜琦燕","袁明媛","李猜","田蜜蜜",
        */
        //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或者1
        Random 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){
            //boyList
            int boyIndex = r.nextInt(boyList.size());
            String name = boyList.get(boyIndex);
            System.out.println(name);
        }else{
            //girlList
            int girlIndex = r.nextInt(girlList.size());
            String name = girlList.get(girlIndex);
            System.out.println(name);
        }
​
​
    }
}

练习3:随机不重复

需求:

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

代码实现:

java 复制代码
public class Test3 {
    public static void main(String[] args) {
       /* 班级里有5个学生
        要求:
        被点到的学生不会再被点到。
        但是如果班级中所有的学生都点完了,需要重新开启第二轮点名。*/
​
​
        //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,但是市会有多个。

添加完毕后,遍历结果格式如下:

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

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

河北省 = 石家庄市,唐山市,邢台市,保定市,张家口市

代码实现:

java 复制代码
public class Test4 {
    public static void main(String[] args) {
        /* 需求
        定义一个Map集合,键用表示省份名称province,值表示市city,但是市会有多个。
        添加完毕后,遍历结果格式如下:
                江苏省 = 南京市,扬州市,苏州市,无锡市,常州市
                湖北省 = 武汉市,孝感市,十堰市,宜昌市,鄂州市
                河北省 = 石家庄市,唐山市,邢台市,保定市,张家口市*/
​
​
        //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);
​
        }
    }
}
相关推荐
Smile灬凉城6665 分钟前
反序列化为啥可以利用加号绕过php正则匹配
开发语言·php
lsx20240616 分钟前
SQL MID()
开发语言
Dream_Snowar19 分钟前
速通Python 第四节——函数
开发语言·python·算法
西猫雷婶21 分钟前
python学opencv|读取图像(十四)BGR图像和HSV图像通道拆分
开发语言·python·opencv
鸿蒙自习室21 分钟前
鸿蒙UI开发——组件滤镜效果
开发语言·前端·javascript
星河梦瑾22 分钟前
SpringBoot相关漏洞学习资料
java·经验分享·spring boot·安全
黄名富25 分钟前
Redis 附加功能(二)— 自动过期、流水线与事务及Lua脚本
java·数据库·redis·lua
love静思冥想27 分钟前
JMeter 使用详解
java·jmeter
言、雲29 分钟前
从tryLock()源码来出发,解析Redisson的重试机制和看门狗机制
java·开发语言·数据库
TT哇36 分钟前
【数据结构练习题】链表与LinkedList
java·数据结构·链表