【无标题】

可变参数

格式:属性类型…名字
例:int…a
他的底层是一个数组
比如我要求数的累加和就可以用到
代码如下

    public static void main(String[] args) {
        int reult = getSum(1, 2, 3, 4, 5);
        System.out.println(reult);

    }
    public static int getSum(int...a){
        int sum=0;

        for (int i : a) {
            sum=sum+i;
        }
        return sum;



    }

但是可变参数有弊端形参只能是一个可变参数如果除了可变参数还有其它参数那么可变参数写在后面

Collections

在这里插入图片描述
在这里插入图片描述

 public static void main(String[] args) {





        //他要配合arrays使用他是一个工具类 他的所有方法都是static'修饰了


        ArrayList list=new ArrayList();
        ArrayList list1=new ArrayList();

        Collections.addAll(list,"add","csa","sc","gdg");
        Collections.addAll(list1,1,2,3,4,5,6,7,9);


        System.out.println(list);//[add, csa, sc, gdg]

        Collections.shuffle(list);
        System.out.println(list);//[csa, sc, add, gdg]数据打乱

        System.out.println("_______________________");
        //按照默认规则排序
        Collections.sort(list);
        System.out.println(list);//[add, csa, gdg, sc]

        System.out.println("_______________________");
        //按照制定规则排序

        Collections.sort(list1, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2-o1;
            }
        });
        System.out.println(list1);//逆序
        System.out.println("-----------------");




        //这是二分查找顺序
        //需要元素有序
        System.out.println(Collections.binarySearch(list1, 2));

        System.out.println("____________");
        //copy拷贝集合中的元素

        //这个代码的意思是把list集合拷贝到list1
        //会覆盖原来的元素
        //如果list>list1长度就会报错
        Collections.copy(list1,list);
        System.out.println(list1);
        System.out.println(list);
        //[add, csa, gdg, sc, 4, 3, 2, 1]
        //[add, csa, gdg, sc]


        System.out.println("_____fill______");
        //把集合中所有数据都修改为指定数据

        ArrayList list2=new ArrayList();
        Collections.addAll(list2,1,2,3,4,5,6,7,8,9,10);
        //Collections.fill(list2,100);
        System.out.println(list2);//[100, 100, 100, 100, 100, 100, 100, 100, 100, 100]


        System.out.println("____________max/min_______");
        //求最大或者最小
        System.out.println(Collections.max(list2));//10


        System.out.println("____________制定规则__________");

        //maxmin制定规则
      //求"a","aaa","aaaa","aaaaa"默认规则满足不了只能制定规则
        ArrayList list3=new ArrayList();
        Collections.addAll(list3,"a","aaa","aaaa","aaaaa");
        System.out.println(Collections.max(list3, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.length() - o2.length();
            }
        }));
        //aaaaa


        System.out.println("____________swap______________");
//交换集合指定位置

        ArrayList list4=new ArrayList();
        Collections.addAll(list4,"a","aaa","aaaa","aaaaa");
        Collections.swap(list4,1,2);
        System.out.println(list4);
        //[a, aaaa, aaa, aaaaa]

    }

集合知识点练习

自动点名器 实现随机点名

  public static void main(String[] args) {
        //初级随机点名

        ArrayList<String> list=new ArrayList();
        Collections.addAll(list,"张三","李四","王五","赵六");

        Collections.shuffle(list);
        //方法一
        for (String o : list) {
            System.out.println(o);
        }
      //二

        String name = list.get(0);
        System.out.println(name);


    }

自动点名器二

在这里插入图片描述

public static void main(String[] args) {

        //思路先设计70和30概率
        //1111111 000抽到1的概率就是70 而抽到0就是30
        //1表示男生 0表示女生

        ArrayList<Integer>list =new ArrayList<>();
        Collections.addAll(list,1,1,1,1,1,1,1);
        Collections.addAll(list,0,0,0);
        //打乱集合位置
        Random r=new Random();
        int index = r.nextInt(list.size());
        //这个获取了随机索引
        Integer number = list.get(index);
        //抽取随机数字
        System.out.println(number);





        //概率做好了了接下来就传入男生女生的名字随机抽取根据10选择男生女生
        ArrayList<String>list1=new ArrayList<>();
        ArrayList<String>list2=new ArrayList<>();
        Collections.addAll(list1,"张三","李四","王五","赵六","赵磊","二狗","大壮");
        Collections.addAll(list2,"菲菲","甜甜","范冰冰");

        //判断上面抽取的是1还是0
        if(number==1){
            int boyIndex = r.nextInt(list1.size());
            String nameBoy = list1.get(boyIndex);
            System.out.println(nameBoy);


            //抽取男生集合
        }else{
            //抽取女生集合
            int girlIndex = r.nextInt(list2.size());
            String nameGirl = list2.get(girlIndex);
            System.out.println(nameGirl);


        }


    }

自动点名器3

在这里插入图片描述

  public static void main(String[] args) {
        //要求点名不重复 一轮点完后重新开始新的一轮

//        for (int i = 0; i < 10; i++) {
//            System.out.println("=======第"+i+"论点名开始==========");
//            //这个循环表示共循环10论
//
//
//            ArrayList<String> list=new ArrayList();
//            Collections.addAll(list,"张三","李四","王五","赵六","范冰冰","王燕妮","李凯","张若琳");
//
//            Collections.shuffle(list);
//            int count=list.size();
//
//            for (int j = 0; j < count; j++) {
//                System.out.println(list.get(j));
//            }
//        }

        //方法二


        for (int j = 0; j < 10; j++) {
            System.out.println("=======第"+j+"论点名开始==========");
            ArrayList<String> list=new ArrayList();
            Collections.addAll(list,"张三","李四","王五","赵六","范冰冰","王燕妮","李凯","张若琳");


            ArrayList<String>list1=new ArrayList<>();

            int count= list.size();
            Random r=new Random();
            for (int i = 0; i < count; i++) {

                int anInt = r.nextInt(list.size());
                //remove 是删除随机到的数并且返回那个数
                String remove = list.remove(anInt);

                list1.add(remove);
                System.out.println(remove);
            }

            list.addAll(list1);
            list1.clear();


            //现在list1的里面存着list的内容 list为空
            //System.out.println(list);
            //System.out.println(list1);
            //[]
            //[李四, 赵六, 张三, 王五, 范冰冰, 李凯, 王燕妮, 张若琳]
            
        }
        
    }

点名器4

在这里插入图片描述

 public static void main(String[] args) {
        //键是省份 值是市
        //思路:集合嵌套 值可以用arrayslist集合

        //没有特殊要求一般采用hashmap
        HashMap<String, ArrayList<String>>hm=new HashMap<>();


        ArrayList<String>city1=new ArrayList<>();
        city1.add("郑州");
        city1.add("濮阳");
        city1.add("洛阳");
        city1.add("开封");
        ArrayList<String>city2=new ArrayList<>();
        city2.add("常州");
        city2.add("南京");
        city2.add("杭州");
        city2.add("尝尝");


        hm.put("河南省",city1);
        hm.put("江苏省",city2);


        //遍历
        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 s : value) {
                sj.add(s);
            }
            System.out.println(key+" = "+sj);


        }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值