Java学习之随堂笔记系列——day16

1 可变参数
    概念:方法参数列表中的参数个数不确定,就表示可变参数。
    可变参数的本质:数组。
    注意事项:方法的参数列表中只能有一个可变参数,并且可变参数只能在参数列表的末尾。
    语法格式:(数据类型...变量名)   

 public class ParameterDemo {
        public static void main(String[] args) {
            add(10,20,30,40); //允许

            int[] arr={10,20,30,40};
            add(arr);//允许

            Integer[] arr2={10,20,30,40};
            //add(arr2); //报错,int[]和Integer[]不能相互转换
        }
        public static int add(int... nums){
            int sum=0;
            for (int num : nums) {
                sum+=num;
            }
            return sum;
        }
    }


    可变参数的使用;
        /*
            集合和数组之间的相互转换
                数组--->集合 Arrays
                    static <T> List<T>    asList​(T... a)    :返回由指定数组支持的固定大小的列表。
                集合--->数组 Collection
                    Object[]    toArray​()    :返回一个包含此集合中所有元素的数组。
                    <T> T[]    toArray​(T[] a)    :返回一个包含此集合中所有元素的数组; 返回的数组的运行时类型是指定数组的运行时类型。
         */
       

 public class ArgsDemo2 {
            public static void main(String[] args) {
                //数组--->集合
                Integer[] arr={10,20,30,40,50};
                List<Integer> list = Arrays.asList(arr);
                System.out.println(list);

                //集合--->数组
                List<String> lts=List.of("hello","world","java");
                //方式1:Object[]     toArray​()    :返回一个包含此集合中所有元素的数组
                Object[] arrs1 = lts.toArray();
                System.out.println(Arrays.toString(arrs1));

                //方式2: <T> T[]    toArray​(T[] a) :需要传递一个数组对象,集合中数据是什么类型就创建一个该类型的空数组传进去
                /*String[] arrs2=new String[lts.size()];
                lts.toArray(arrs2);*/
                //简化写法
                String[] arrs2 = lts.toArray(new String[lts.size()]);
                System.out.println(Arrays.toString(arrs2));
            }
        }


2 Map集合
    map集合是一个双列集合,每次存储一对值,分为key-value。
    特点:key相同,value会被替换。也就是说key是唯一的。

    map集合的使用,常用方法:(重点)
        增/添加/改
            V put​(K key, V value):添加获取替换值,如果添加的key不存在,那么返回值就是null。如果key存在,那么新的value会替换原来的value值,返回值是被替换的值。
        删/移除
            V remove(K key):根据key移除一对元素。返回值就是对应的value值
        查/获取
            V get(K key):根据key获取value。
            K keySet():获取所有的key
            Map.Entry<K,V> entrySet():获取所有的键值对对象
        遍历:(重要*****)
            方式1:键找值的方式,实现思路:
                1 获取所有的key
                2 遍历所有的key
                3 在遍历过程中根据key获取对应的value值,打印结果
            方式2:键值对的方式,实现思路:
                Map.Entry<K,V> : Entry是Map的一个内部接口(看成是内部类结构)。Entry也有泛型,泛型和Map集合的泛型一样。
                Entry的作用:在我们调用Map集合的put方法存值的时候,其实内部会创建一个Entry实现类对象,将我们存进去的值封装到Entry实现类对象中。
                            简单说:Map集合的内部会将每一对值封装成一个个Entry对象,Entry对象也叫做键值对对象。

                1 获取所有的键值对对象:Map.Entry<K,V> entrySet();
                2 遍历所有的键值对对象,获取每一个键值对对象
                3 调用键值对对象的getKey()和getValue()方法获取键和值,打印结果。
    Map集合key唯一的条件:
        key表示的对象要重写hashCode()和equals()方法。

3 Collections集合工具类
  1 Collection和Collections的区别?
    Collection是单列集合的顶层接口,Collections是操作集合的工具类。
  2 Collections的常用方法:
    static void    shuffle​(List<?> list):随机打乱集合中元素的顺序。
    static <T extends Comparable<? super T>> void sort​(List<T> list):
            对list集合中的元素进行自然排序,list集合中的元素必须要实现Comparable接口
    static <T> void    sort​(List<T> list, Comparator<? super T> c):对list集合中的元素使用Comparator比较器进行排序

4 斗地主案例
    基础版思路分析
        1、准备牌:
            1、定义一个List集合作为牌盒
            2、定义两个数组,存储花色和牌号
            3、遍历数组,将花色和牌号进行组合,将组合好的牌存的牌盒list集合中
        2、洗牌:
            Collections.shuffle(牌盒集合)
        3、发牌
            1、定义三个List集合表示三个玩家和一个集合表示底牌
            2、遍历牌盒的list集合,共有54张牌在list集合中
            3、如果索引大于50,那么就发给底牌集合
            4、将索引对3取余,如果余数是0,那么就发给玩家1;如果余数是1,就发给玩家2;如果余数是2,就发给玩家3
            if(i>50){
               //发给底牌
            }else if(i%3==0){
              //发给玩家1
            }else if(I%3==1){
              //发给玩家2
            } else if(I%3==2){
              //发给玩家3
            }
        4、看牌:打印玩家姓名和玩家集合对象
    加强版思路分析:
        1、准备牌
            1、定一个Map集合最为牌盒
            2、定义两个数组,存储花色和牌号
            3、定义一个牌的序号起始值为0,每存一张牌,序号就++;
            4、遍历数组,将花色和牌号进行组合,将组合好的牌存的牌盒map集合中
        2、洗牌
            1.获取Map集合的所有key
               Set<Integer> keys=poker.keySet();
            2.将set集合转换成list,使用list的构造方法即可
            3.打乱顺序
               Collections.shuffle(list)
        3、发牌
            1、定义三个TreeSet集合表示三个玩家和一个集合表示底牌
            2、遍历装有序号的list集合,共有54个序号在list集合中
            3、如果索引大于50,那么就发给底牌集合
            4、将索引对3取余,如果余数是0,那么就发给玩家1;如果余数是1,就发给玩家2;如果余数是2,就发给玩家3
            if(i>50){
               //发给底牌
            }else if(i%3==0){
              //发给玩家1
            }else if(I%3==1){
              //发给玩家2
            } else if(I%3==2){
              //发给玩家3
            }
        4、看牌
            定义一个方法:遍历玩家的TreeSet集合,根据序号从Map集合中获取对应的牌,打印到控制台
作业1:查API文档实现数组和集合之间的相互转换

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值