• Java基础-集合的嵌套


                          Java基础-集合的嵌套

                                           作者:尹正杰

    版权声明:原创作品,谢绝转载!否则将追究法律责任。

    一.静态导入

       静态导入是在JDK1.5后的新特性,可以减少开发的代码量,但是实际用处是很一般,静态导入的标准写法只有在导入包的时候才能使用。导入包的最末尾必须是一个静态成员。接下来我们可以看一下案例

     1 /*
     2 @author :yinzhengjie
     3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
     4 EMAIL:y1053419035@qq.com
     5 */
     6 
     7 package cn.org.yinzhengjie.note3;
     8 
     9 import static java.lang.System.out;
    10 import static java.util.Arrays.sort;
    11 
    12 
    13 public class StaticImportDemo {
    14     public static void main(String[] args) {
    15         //发现没有,打印的时候不用写System啦!
    16         out.println("yinzhengjie");
    17         int [] arr = {9,7,5,3,1};
    18         //发现没有,我没有写类名,直接写方法就可以啦!
    19         sort(arr);
    20         for (int i : arr) {
    21             System.out.println(i);
    22         }
    23     }
    24 }
    25 
    26 /*
    27 以上代码执行结果如下:
    28 yinzhengjie
    29 1
    30 3
    31 5
    32 7
    33 9
    34 */

    二.方法的可变参数

       JDK1.5后的新特性,方法的可变参数,前提是方法参数数据类型确定,参数的个数任意。案例如下:

     1 /*
     2 @author :yinzhengjie
     3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
     4 EMAIL:y1053419035@qq.com
     5 */
     6 
     7 package cn.org.yinzhengjie.note4;
     8 
     9 public class VarArgumentsDemo {
    10     public static void main(String[] args) {
    11         int sum = getsum(512,321,14,53,566,768,854,123,21,534,786);
    12         System.out.println(sum);
    13     }
    14 
    15     //定义方法求任何个整数和,由于传入的参数不固定,因此我们就将形式参数设置为可变参数。
    16     private static int getsum(int... args) {
    17         int sum = 0;
    18         for (int i : args) {
    19             sum += i;
    20         }
    21         return sum;
    22     }
    23 }
    24 
    25 
    26 /*
    27 以上代码执行结果如下:
    28 4552
    29 */

      可变采参数的注意事项:

          1>.一个方法中,可变参数只能有一个;

          2>.可变参数必须写在参数列表的最后一个;

    三.Collection工具类

    1>.Collections.sort静态方法【对List结合进行升序排列】

     1 /*
     2 @author :yinzhengjie
     3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
     4 EMAIL:y1053419035@qq.com
     5 */
     6 
     7 package cn.org.yinzhengjie.note4;
     8 
     9 import java.util.ArrayList;
    10 import java.util.Collection;
    11 import java.util.Collections;
    12 import java.util.List;
    13 
    14 public class CollectionsDemo {
    15     public static void main(String[] args) {
    16         List<String> list = new ArrayList<>();
    17         list.add("Y");
    18         list.add("I");
    19         list.add("N");
    20         list.add("zheng");
    21         list.add("jie");
    22         System.out.println(list);
    23         //对List集合,继续升序排序。
    24         Collections.sort(list);
    25         System.out.println(list);
    26         
    27     }
    28 }
    29 
    30 /*
    31 以上代码执行结果如下:
    32 [Y, I, N, zheng, jie]
    33 [I, N, Y, jie, zheng]
    34 */

    2>.Collections.binarySearch静态方法【对List集合进行二分搜索,方法参数,传递List集合,传递被查找的元素】

     1 /*
     2 @author :yinzhengjie
     3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
     4 EMAIL:y1053419035@qq.com
     5 */
     6 
     7 package cn.org.yinzhengjie.note4;
     8 
     9 import java.util.ArrayList;
    10 import java.util.Collection;
    11 import java.util.Collections;
    12 import java.util.List;
    13 
    14 public class CollectionsDemo {
    15     public static void main(String[] args) {
    16         List<Integer> list = new  ArrayList<>();
    17         list.add(1);
    18         list.add(3);
    19         list.add(5);
    20         list.add(7);
    21         list.add(9);
    22         list.add(11);
    23         //调用工具类静态方法binarySearch
    24         int index = Collections.binarySearch(list, 9);
    25         System.out.println(index);
    26         //若找不到索引的话,就返回插入点的相反数减去一的值,比如8应该是在7的后面,7后面的索引应该是4,相反数为-4,在相反数的基础上减去1,因此返回值应该是-5
    27         index = Collections.binarySearch(list, 8);
    28         System.out.println(index);
    29     }
    30 }
    31 
    32 /*
    33 以上代码执行结果如下:
    34 4
    35 -5
    36 */

    3>.Collections.shuffle静态方法【对List集合中的元素,进行随机排序】

     1 /*
     2 @author :yinzhengjie
     3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
     4 EMAIL:y1053419035@qq.com
     5 */
     6 
     7 package cn.org.yinzhengjie.note4;
     8 
     9 import java.util.ArrayList;
    10 import java.util.Collection;
    11 import java.util.Collections;
    12 import java.util.List;
    13 
    14 public class CollectionsDemo {
    15     public static void main(String[] args) {
    16         List<Integer> list = new  ArrayList<>();
    17         list.add(1);
    18         list.add(3);
    19         list.add(5);
    20         list.add(7);
    21         list.add(9);
    22         list.add(11);
    23         System.out.println(list);
    24         
    25         Collections.shuffle(list);
    26         
    27         System.out.println(list);
    28         
    29     }
    30 }
    31 
    32 /*
    33 以上代码执行结果如下:
    34 [1, 3, 5, 7, 9, 11]
    35 [11, 5, 1, 3, 9, 7]
    36 */

    4>.将不安全的集合改变成为安全的集合,常见的方法如下:

    四.集合的嵌套

      集合嵌套并不是一个新的指示单,仅仅是集合存储的对象还是集合,如Collection集合嵌套,Collection集合与Map集合互相嵌套,Map集合嵌套。

      1 /*
      2 @author :yinzhengjie
      3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
      4 EMAIL:y1053419035@qq.com
      5 */
      6 
      7 package cn.org.yinzhengjie.note4;
      8 
      9 import java.util.HashMap;
     10 import java.util.Iterator;
     11 import java.util.Map.Entry;
     12 import java.util.Set;
     13 
     14 public class MapMapDemo {
     15     public static void main(String[] args) {
     16         //定义安康的集合
     17         HashMap<String, String> ankang = new HashMap<>();
     18         //定义北京的集合
     19         HashMap<String, String> beijing = new HashMap<>();
     20         //定义存放地名的集合
     21         HashMap<String, HashMap<String,String>> CtiyScenicSpot = 
     22                 new HashMap<String, HashMap<String,String>> ();
     23         //往安康这个集合存放数据
     24         ankang.put("岚皋县", "南宫山");
     25         ankang.put("平利县", "腊肉");
     26         ankang.put("紫阳县", "富硒茶");
     27         ankang.put("汉滨区", "长江大桥");
     28         //往北京这个集合存放数据
     29         beijing.put("大兴区", "野生动物园");
     30         beijing.put("朝阳区", "望京SOHO");
     31         beijing.put("海淀区", "中关村");
     32         
     33         //将安康和北京两个集合放入存放地名的集合中去
     34         CtiyScenicSpot.put("安康", ankang);
     35         CtiyScenicSpot.put("北京", beijing);
     36 //        keySet(CtiyScenicSpot);
     37         entrySet(CtiyScenicSpot);
     38     }
     39     
     40     //遍历方式一:通过keySet方式进行遍历
     41     public static void keySet(HashMap<String, HashMap<String,String>> CtiyScenicSpot) {
     42         //调用CtiyScenicSpot集合方法keySet将键存储到Set集合
     43         Set<String> cityNameset = CtiyScenicSpot.keySet();
     44         //迭代Set集合
     45         Iterator<String> cityName = cityNameset.iterator();
     46         while(cityName.hasNext()) {
     47             //获取CtiyScenicSpot集合的键
     48             String cityNameKey = cityName.next();
     49             //CtiyScenicSpot集合的方法get获取值,值是一个HashMap集合
     50             HashMap<String,String> cityMap = CtiyScenicSpot.get(cityNameKey);
     51             //调用cityMap集合方法keySet,键存储到Set集合
     52             Set<String> CountyAreaSet = cityMap.keySet();
     53             Iterator<String> CountyAreaIt = CountyAreaSet.iterator();
     54             while(CountyAreaIt.hasNext()) {
     55                 //CountyAreaIt.hasNext()获取出来的是cityMap的键,县和区
     56                 String CountyAreaKey = CountyAreaIt.next();
     57                 //调用cityMap集合中的get方法取值
     58                 String CharacteristicRepresentation = cityMap.get(CountyAreaKey);
     59                 System.out.println(cityNameKey+"--"+CountyAreaKey+"--"+CharacteristicRepresentation);
     60             }
     61         }
     62     }
     63     
     64     //遍历方式二:通过entrySet方式进行遍历
     65     public static void entrySet(HashMap<String, HashMap<String,String>> CtiyScenicSpot) {
     66         //调用CtiyScenicSpot集合entrySet方法,将CtiyScenicSpot集合的键值对关系对象,存储到Set集合
     67         Set<Entry<String, HashMap<String, String>>> cityNameset = CtiyScenicSpot.entrySet();
     68         //迭代器迭代Set集合
     69         Iterator<Entry<String, HashMap<String, String>>> cityNameIt = cityNameset.iterator();
     70         while(cityNameIt.hasNext()) {
     71             //cityNameIt.hasNext()方法,取出的是CtiyScenicSpot结合键值对关系对象
     72             Entry<String, HashMap<String, String>> cityNameEntry = cityNameIt.next();
     73             //cityNameEntry方法getkey,getValue
     74             String cityNamekey = cityNameEntry.getKey();
     75             //获取值,值是一个Map集合
     76             HashMap<String, String> classMap = cityNameEntry.getValue();
     77             //调用集合classMap方法entrySet,键值对关系对象存储Set集合
     78             Set<Entry<String, String>> CountyAreaSet = classMap.entrySet();
     79             //迭代CountyAreaSet集合
     80             Iterator<Entry<String, String>> CountyAreaIt = CountyAreaSet.iterator();
     81             while(CountyAreaIt.hasNext()) {
     82                 //CountyAreaIt.hasNext()获取出来的是cityMap的键,县和区
     83                 Entry<String, String> CountyAreaEntry = CountyAreaIt.next();
     84                 //调用CountyAreaEntry的getKey和getValue方法
     85                 String CountyAreaKey = CountyAreaEntry.getKey();
     86                 String CountyAreaValue = CountyAreaEntry.getValue();
     87                 System.out.println(cityNamekey+"--"+CountyAreaKey+"--"+CountyAreaValue);
     88             }
     89             
     90         }
     91     }
     92 }
     93 
     94 
     95 /*
     96 以上代码执行结果如下:
     97 安康--岚皋县--南宫山
     98 安康--平利县--腊肉
     99 安康--紫阳县--富硒茶
    100 安康--汉滨区--长江大桥
    101 北京--朝阳区--望京SOHO
    102 北京--大兴区--野生动物园
    103 北京--海淀区--中关村
    104 */

    五.模拟斗地主洗牌发牌案例

    1>.项目需求

      按照斗地主的规则,完成洗牌发牌的动作,具体规则如下:

        a>.组装54张扑克牌;

        b>.将54张牌顺序打乱;

        c>.三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌;

        d>.查看三人各自手中的底牌(按照牌的大小顺序);

      注意:手中扑克牌从小到大的摆放顺序依次是:“大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3”。

    2>.案例需求分析

      a>.准备牌:

        完成纸牌和数字的映射关系:使用双列Map集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典)。

      b>.洗牌

        通过数字完成洗牌和发牌。

      c>.发牌

        将每个人以及底牌设计为ArrayList<String>,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌,存放过程中要求数字大小与斗地主规则的大小对应,将代表不同纸牌的数字分别分配给不同的玩家与底牌。

      d>.看牌

        通过Map集合找到对应字符展示,通过查询纸牌与数字的对应关系,由数字转成纸牌字符串再进行展示。

    3>.模拟斗地主代码实现

      1 /*
      2 @author :yinzhengjie
      3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
      4 EMAIL:y1053419035@qq.com
      5 */
      6 
      7 package cn.org.yinzhengjie.note4;
      8 
      9 import java.util.ArrayList;
     10 import java.util.Collections;
     11 import java.util.HashMap;
     12 
     13 public class DouDiZhu {
     14     public static void main(String[] args) {
     15         
     16         //1. 组合牌
     17         //创建Map集合,键是编号,值是牌
     18         HashMap<Integer,String> pooker = new HashMap<Integer, String>();
     19         //创建List集合,存储编号,该集合有序的特点可以存放相应的int类型。
     20         ArrayList<Integer> pookerNumber = new ArrayList<Integer>();
     21         //定义出13个点数的数组,注意顺序是从大到小
     22         String[] numbers = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
     23         //定义4个花色数组,因为扑克牌就四个花色
     24         String[] colors = {"黑桃","红桃","梅花","方块"};
     25         //定义整数变量,作为键出现,其中0与1索引空出来用于存放大小王。
     26         int index = 2;
     27         //遍历数组,花色+点数的组合,存储到Map集合
     28         for(String number : numbers){
     29             for(String color : colors){
     30                 //将扑克牌的索引与对应的扑克牌进行绑定【注意,字符串需要做一个拼接操作】。
     31                 pooker.put(index, color+number);
     32                 //将编号加入集合中并要自加1.
     33                 pookerNumber.add(index++);
     34             }
     35         }
     36         //存储大王,和小王
     37         pooker.put(0, "大王");
     38         pookerNumber.add(0);
     39         pooker.put(1, "小王");
     40         pookerNumber.add(1);
     41         
     42         //2>洗牌功能
     43         //将牌的编号打乱
     44         Collections.shuffle(pookerNumber);
     45         
     46         //3>.发牌功能
     47         //将牌编号,发给玩家集合,底牌集合
     48         ArrayList<Integer> player1 = new ArrayList<Integer>();
     49         ArrayList<Integer> player2 = new ArrayList<Integer>();
     50         ArrayList<Integer> player3 = new ArrayList<Integer>();
     51         ArrayList<Integer> bottom = new ArrayList<Integer>();
     52         
     53         //发牌采用的是集合索引%3
     54         for(int i = 0 ; i < pookerNumber.size() ; i++){
     55             //先将底牌做好
     56             if(i < 3){
     57                 //存到底牌去
     58                 bottom.add( pookerNumber.get(i));
     59                //对索引%3判断
     60             }else if(i % 3 == 0){
     61                 //索引上的编号,发给玩家1
     62                 player1.add( pookerNumber.get(i) );
     63             }else if( i % 3 == 1){
     64                 //索引上的编号,发给玩家2
     65                 player2.add( pookerNumber.get(i) );
     66             }else if( i % 3 == 2){
     67                 //索引上的编号,发给玩家3
     68                 player3.add( pookerNumber.get(i) );
     69             }
     70         }
     71         
     72         //4>.对玩家手中的编号排序
     73         Collections.sort(player1);
     74         Collections.sort(player2);
     75         Collections.sort(player3);
     76         
     77         //5>.看牌,
     78         //将玩家手中的编号,到Map集合中查找,根据键找值.
     79         look("尹正杰",player1,pooker);
     80         look("刘亦菲",player2,pooker);
     81         look("邓紫棋",player3,pooker);
     82         look("底牌",bottom,pooker);
     83     }
     84     
     85     //定义看牌的方法
     86     public static void look(String name,ArrayList<Integer> player,HashMap<Integer,String> pooker){
     87         //遍历ArrayList集合,获取元素,作为键,到集合Map中找值
     88         System.out.print("[" + name + "]" + "	:");
     89         for(Integer key : player){
     90             String value = pooker.get(key);
     91             System.out.print(value+" ");
     92         }
     93         System.out.println();
     94     }
     95 }
     96 
     97 
     98 /*
     99 以上代码执行结果如下:
    100 [尹正杰]    :大王 梅花2 红桃A 梅花A 方块A 梅花K 方块K 红桃J 方块J 方块9 红桃8 红桃7 梅花7 方块7 方块4 梅花3 方块3 
    101 [刘亦菲]    :小王 黑桃2 红桃2 方块2 黑桃A 黑桃K 黑桃Q 梅花10 红桃9 方块8 黑桃5 红桃5 方块5 黑桃4 梅花4 黑桃3 红桃3 
    102 [邓紫棋]    :红桃K 红桃Q 梅花Q 方块Q 黑桃J 梅花J 黑桃10 方块10 黑桃9 梅花9 黑桃8 梅花8 黑桃7 黑桃6 红桃6 方块6 梅花5 
    103 [底牌]        :红桃10 红桃4 梅花6 
    104 */

    六.集合的总结

      给大家推荐一款画图软件,百度脑图。它是一款很好使的画图工具,可以把我们学习的知识点进行归纳整理,下面我就抛砖引玉一下,给大家做个案例:

     

  • 相关阅读:
    Asp.net 通过Repeater循环添加对应的一组控件
    JS将number数值转化成为货币格式
    Asp.net 在 Postback 之后 执行 javascript 方法
    Asp.net 通过Repeater嵌套Repeater循环添加对应的一组控件
    向SharePoint 2010中添加Permission Level,Group,以及相应的User
    Asp.net 前后台操作cookie 实现数据的循环下载
    JS 将 string 转换成为 number
    C# Dictionary通过value获取对应的key值
    手机相机下的世界
    自定义Data Service Providers — (3)IServiceProvider和DataSources 服务提供者和数据源
  • 原文地址:https://www.cnblogs.com/yinzhengjie/p/8955398.html
Copyright © 2020-2023  润新知