Java学习记录(十)

可变参数的应用

有时候在我们调用方法时,我们不能确定具体传入多少个数值,这个时候我们就能采用可变参数进行应用,格式为

public static int getSum(int...arg){
        return 0;
}

(注意,这是时候形参是会自动将输入的形参放入arg这个数组中,在方法的形参中只能写一个可变参数,如果有其他形参,可变参数得写在所有形参的最后面)

这个时候,我们在调用该方法的时候就能输入自定义个数据,而这些数据就会存储到arg数组中,如果我们后面需要调用,我们直接将值从数组中取出进行使用

例如我下面需要使用可变参数进行传递形参进行方法的实现,代码如下:

package com.itazhang.map03;

public class SumTest {
    public static void main(String[] args) {
        System.out.println(getSum(1, 2, 3, 5, 6, 7));
    }
    //int...a表示我可以传入自定义个数据,只要时int类型的就行,但是这个arg是个数组
    //需要用时直接将该数据从该数组取出
    public static int getSum(int...arg){
        int sum = 0;
        for (int i : arg) {
            sum = sum +i;
        }
        return sum;
    }
}

Collections工具类的使用

在Java中,Java自动帮我们写好了一些单列集合的工具类,方便我们调用方法操作单列集合,如我现在所写的Collections就是这样的一个工具类,里面有许多方法(注意:只能单列集合使用!)

addAll方法

addall方法能一次性批量的添加数据到指定的单列集合中,格式如下

Collections.addAll(目的单列集合,数据1,数据2.........),在目的单列集合后面,不管写多少数据都能自动添加到目的集合中。实现如下

        List<String> l1 = new ArrayList<>();
        Collections.addAll(l1,"aaa","bbb","ccc");

shuffle方法

shuffle方法能自动将指定单列集合打乱顺序,每次运行打乱顺序都不一样

        //打乱集合数据
        Collections.shuffle(l1);
        System.out.println(l1);

下列为一个利用上诉方法的小练习,创建两个集合分别存储男生和女生并打乱顺序,从10个同学中抽取一个人,要求70%的概率抽到男同学,30%的概率抽到女同学,我们直接创建一个长度为10的只包含0和1数据的集合,其中7个1,3个0,我们再用shuffle方法打乱该集合,从中抽取一个数,这样就实现了70%和30%的概率问题,最后如果抽到的是1,我们从男生集合里面取出一个,如果抽到的是0,从女生集合里面取出一个,这样就完美的实现了概率问题。具体代码如下:

package com.itazhang.map03;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;

public class TestDemo1 {
    public static void main(String[] args) {
        ArrayList<String> listman = new ArrayList<>();
        Collections.addAll(listman,"张","王","李","孙","杨","刘");
        Collections.shuffle(listman);


        ArrayList<String> listgirl = new ArrayList<>();
        Collections.addAll(listgirl,"女1","女2");
        Collections.shuffle(listgirl);

        ArrayList<Integer> list2 = new ArrayList<>();
        Collections.addAll(list2,1,1,1,1,1,1,1,0,0,0);
        Collections.shuffle(list2);
        Random r = new Random();
        int temp = r.nextInt(list2.size());
        if(list2.get(temp) == 1){
            System.out.println(listman.get(0));
        }else if(list2.get(temp) == 0){
            System.out.println(listgirl.get(0));
        }
    }
}

下列为一个小练习,要求在六个字符串中抽取,每次抽取的不一样,且抽取完后进行第二轮抽取

具体实现代码如下:

package com.itazhang.map03;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;

public class ListTestDemo2 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"aaa","bbb","ccc","ddd","eee","fff");
        int count = list.size();
        Random r =new Random();
        ArrayList<String> list2 = new ArrayList<>();
        //开始点名,将点了名的从集合中删除,添加到另一个集合中
        for (int i = 0; i < count; i++) {
            int temp = r.nextInt(list.size());
            String tempstr = list.remove(temp);
            list2.add(tempstr);
            System.out.println(tempstr);
        }
        System.out.println("第二轮点名开始");
        for (int i = 0; i < count; i++) {
            int temp = r.nextInt(list2.size());
            String tempstr = list2.remove(temp);
            System.out.println(tempstr);
        }
    }
}

集合的嵌套

有时候我们会存储一个键对应多个数据,这个时候map集合还能使用吗?答案是当然的,我们将键存入map集合中,对应的值我们用一个个单列集合存储起来,这样的话就能实现一个键对应一个集合,而一个集合里面存储着多个值

一个小案例,一个省对应着多个市,请用代码实现

package com.itazhang.map03;

import java.util.*;

public class Exercise1 {
    public static void main(String[] args) {
        Map<String, ArrayList<String>> m = new HashMap<>();
        ArrayList<String> list1 = new ArrayList<>();
        ArrayList<String> list2 = new ArrayList<>();
        ArrayList<String> list3 = new ArrayList<>();
        Collections.addAll(list1,"南京市","扬州市","苏州市");
        Collections.addAll(list2,"武汉市","十堰市","宜昌市");
        Collections.addAll(list3,"唐山市","保定市","石家庄市");
        m.put("江苏省",list1);
        m.put("湖北省",list2);
        m.put("河北省",list3);
        System.out.println(m);
    }
}

不可变集合

我们有时不想让外面修改我们的一些集合里的数据,这个时候我们就能用不可变集合

不可变集合创建方法为

List<String> list = List.of("aaa", "bbb", "ccc", "ddd");
Set<String> set = Set.of("aaa", "bbb", "ccc", "ddd");
Map<String, String> map = Map.of("001", "beijin", "002", "tianjin", "003", "shanghai");

注意(在Map集合中会自动将两个数据作为一对键值对,前面的为键,后面的为值)

通过调用集合里的静态方法of来创建一个不可变集合,这个集合里的数据可以被查询,但是不能被修改和删除,这就是不可变集合所持有的特点。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值