集合的综合练习

自动点名器1:班级里有N个学生,实现随机点名器

public class test {
    public static void main(String [] args) {
    	 
    	ArrayList<String> list=new ArrayList<>();//创建一个集合
    	//在集合中添加元素
    	Collections.addAll(list, "李明","王五","赵六","张三","李四","安然","杜若","范若","","倩倩");
    	Random r=new Random();
    	int index=r.nextInt(list.size());
    	String name=list.get(index);
    	System.out.println(name);
    	}
}

自动点名器2:班级里有N个学生,要求:70%概率点到男生,30%概率点到女生。

分析:1)用一个【1,1,1,1,1,1,1,0,0,0】集合,打乱顺序,来获取随机索引,抽到1的概率为70%,抽到0的概率为30%。

2)创建男生集合,女生集合添加数据,判断索引值为1还是0,若为1在男生集合抽取,若为0在女生集合抽取。

public class test {
    public static void main(String [] args) {
    	 
    	ArrayList<Integer> list=new ArrayList<>();//创建一个集合
    	Collections.addAll(list, 1,1,1,1,1,1,1);
    	Collections.addAll(list, 0,0,0);
    	Collections.shuffle(list);//打乱顺序
    	//获取随机索引
    	Random r=new Random();
        int index=r.nextInt(list.size());
        int number=list.get(index);
        System.out.println(number);
        ArrayList<String> boy=new ArrayList<>();//男生集合
        Collections.addAll(boy, "李明","赵六","王五","安卓","李四","钱孙","史曾");
        ArrayList<String> girl=new ArrayList<>();//女生集合
        Collections.addAll(girl, "刘丽","范若","何怡");
        //判断索引为1还是0
        if(number==1) {
        	int boyindex=r.nextInt(boy.size());//获取boy集合的随机索引
        	System.out.println(boy.get(boyindex));
        }else {
        	int girlindex=r.nextInt(girl.size());//获取girl集合的随机索引
        	System.out.println(girl.get(girlindex));
        }
    	}
}

自动点名器3:班级里有5个学生,要求:被点到的学生不会再被点到;但是如果班级中所有的学生都点完了,需要重新开启第二轮点名。
分析:1)被点到的学生不会再被点到,用remove移除集合中的元素,利用for循环保证将每位同学点到。

2)需要重新开启第二轮点名,用一个新集合保存旧集合的数据,remove移除完元素后,集合为空,将新集合数据赋给旧集合,利用for循环,定义开启第n次点名(假设点六次名)

public class test {
    public static void main(String [] args) {
    	 
        ArrayList<String> list=new ArrayList<>();//创建一个集合存放学生
        Collections.addAll(list, "李明","范若","王五","刘丽","史曾");
        Random r=new Random();
        int count=list.size();
        ArrayList<String> list1=new ArrayList<>();//第二个集合
        for(int j=0;j<=5;j++) {
        	System.out.println("-------第"+(j+1)+"次点名--------");
                for(int i=0;i<count;i++) {
                   int index=r.nextInt(list.size());
                   String name=list.remove(index);//要保证被点到的同学不会再被点到,用remove移除集合元素
                   list1.add(name);
                     System.out.println(name);
                 }
                    list.addAll(list1);
                    list1.clear();
        }
    	}
}

集合嵌套:需求:定义一个Map集合,键用表示省份名称province,值表示市city,但是市会有多个。
添加完毕后,遍历结果格式如下:
江苏省=南京市,扬州市,苏州市,无锡市,常州市
湖北省=武汉市,孝感市,十堰市,宜昌市,鄂州市
河北省=石家庄市,唐山市,邢台市,保定市,张家口市
分析:值用单列集合存储。

public class test {
    public static void main(String [] args) {
    	 
       HashMap<String, ArrayList<String>> hm=new HashMap<>();
       ArrayList<String> city1=new ArrayList<>();
       Collections.addAll(city1, "南京市","扬州市","苏州市","无锡市","常州市");
       ArrayList<String> city2=new ArrayList<>();
       Collections.addAll(city2, "武汉市","孝感市","十堰市","宜昌市","鄂州市");
       ArrayList<String> city3=new ArrayList<>();
       Collections.addAll(city3, "石家庄市","唐山市","邢台市","保定市","张家口市");
       hm.put("江苏省", city1);
       hm.put("湖北省", city2);
       hm.put("河南省", city3);
       //利用entry遍历map
       Set<Map.Entry<String, ArrayList<String>>> entries=hm.entrySet();
       for(Map.Entry<String, ArrayList<String>> entry:entries) {
    	   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);
       }
      
    	}
}

  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值