当前位置:   article > 正文

Java 中集合的练习

Java 中集合的练习

练习1:随机点名器

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

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

代码实现:

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

练习2:带概率的随机

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

代码实现:

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

练习3:随机不重复

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

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

代码实现:

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

练习4:集合的嵌套

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

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

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

  1. public class Test4 {
  2. public static void main(String[] args) {
  3. //1.创建Map集合
  4. HashMap<String, ArrayList<String>> hm = new HashMap<>();
  5. //2.创建单列集合存储市
  6. ArrayList<String> city1 = new ArrayList<>();
  7. city1.add("南京市");
  8. city1.add("扬州市");
  9. city1.add("苏州市");
  10. city1.add("无锡市");
  11. city1.add("常州市");
  12. ArrayList<String> city2 = new ArrayList<>();
  13. city2.add("武汉市");
  14. city2.add("孝感市");
  15. city2.add("十堰市");
  16. city2.add("宜昌市");
  17. city2.add("鄂州市");
  18. ArrayList<String> city3 = new ArrayList<>();
  19. city3.add("石家庄市");
  20. city3.add("唐山市");
  21. city3.add("邢台市");
  22. city3.add("保定市");
  23. city3.add("张家口市");
  24. //3.把省份和多个市添加到map集合
  25. hm.put("江苏省",city1);
  26. hm.put("湖北省",city2);
  27. hm.put("河北省",city3);
  28. Set<Map.Entry<String, ArrayList<String>>> entries = hm.entrySet();
  29. for (Map.Entry<String, ArrayList<String>> entry : entries) {
  30. //entry依次表示每一个键值对对象
  31. String key = entry.getKey();
  32. ArrayList<String> value = entry.getValue();
  33. StringJoiner sj = new StringJoiner(", ","","");
  34. for (String city : value) {
  35. sj.add(city);
  36. }
  37. System.out.println(key + " = " + sj);
  38. }
  39. }
  40. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/886052
推荐阅读
相关标签
  

闽ICP备14008679号