java 集合嵌套_Java基础-集合的嵌套

Java基础-集合的嵌套

作者:尹正杰

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

一.静态导入

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

1 /*

2 @author :yinzhengjie3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/

4 EMAIL:y1053419035@qq.com5 */

6

7 packagecn.org.yinzhengjie.note3;8

9 import staticjava.lang.System.out;10 import staticjava.util.Arrays.sort;11

12

13 public classStaticImportDemo {14 public static voidmain(String[] args) {15 //发现没有,打印的时候不用写System啦!

16 out.println("yinzhengjie");17 int [] arr = {9,7,5,3,1};18 //发现没有,我没有写类名,直接写方法就可以啦!

19 sort(arr);20 for (inti : arr) {21 System.out.println(i);22 }23 }24 }25

26 /*

27 以上代码执行结果如下:28 yinzhengjie29 130 331 532 733 934 */

二.方法的可变参数

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

1 /*

2 @author :yinzhengjie3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/

4 EMAIL:y1053419035@qq.com5 */

6

7 packagecn.org.yinzhengjie.note4;8

9 public classVarArgumentsDemo {10 public static voidmain(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 (inti : args) {19 sum +=i;20 }21 returnsum;22 }23 }24

25

26 /*

27 以上代码执行结果如下:28 455229 */

可变采参数的注意事项:

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

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

三.Collection工具类

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

1 /*

2 @author :yinzhengjie3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/

4 EMAIL:y1053419035@qq.com5 */

6

7 packagecn.org.yinzhengjie.note4;8

9 importjava.util.ArrayList;10 importjava.util.Collection;11 importjava.util.Collections;12 importjava.util.List;13

14 public classCollectionsDemo {15 public static voidmain(String[] args) {16 List 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 :yinzhengjie3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/

4 EMAIL:y1053419035@qq.com5 */

6

7 packagecn.org.yinzhengjie.note4;8

9 importjava.util.ArrayList;10 importjava.util.Collection;11 importjava.util.Collections;12 importjava.util.List;13

14 public classCollectionsDemo {15 public static voidmain(String[] args) {16 List 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 435 -536 */

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

1 /*

2 @author :yinzhengjie3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/

4 EMAIL:y1053419035@qq.com5 */

6

7 packagecn.org.yinzhengjie.note4;8

9 importjava.util.ArrayList;10 importjava.util.Collection;11 importjava.util.Collections;12 importjava.util.List;13

14 public classCollectionsDemo {15 public static voidmain(String[] args) {16 List 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>.将不安全的集合改变成为安全的集合,常见的方法如下:

e91d87f8cdd5b7c77c1de796d5214fe9.png

四.集合的嵌套

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

1 /*

2 @author :yinzhengjie3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/

4 EMAIL:y1053419035@qq.com5 */

6

7 packagecn.org.yinzhengjie.note4;8

9 importjava.util.HashMap;10 importjava.util.Iterator;11 importjava.util.Map.Entry;12 importjava.util.Set;13

14 public classMapMapDemo {15 public static voidmain(String[] args) {16 //定义安康的集合

17 HashMap ankang = new HashMap<>();18 //定义北京的集合

19 HashMap beijing = new HashMap<>();20 //定义存放地名的集合

21 HashMap> CtiyScenicSpot =

22 new HashMap>();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>CtiyScenicSpot) {42 //调用CtiyScenicSpot集合方法keySet将键存储到Set集合

43 Set cityNameset =CtiyScenicSpot.keySet();44 //迭代Set集合

45 Iterator cityName =cityNameset.iterator();46 while(cityName.hasNext()) {47 //获取CtiyScenicSpot集合的键

48 String cityNameKey =cityName.next();49 //CtiyScenicSpot集合的方法get获取值,值是一个HashMap集合

50 HashMap cityMap =CtiyScenicSpot.get(cityNameKey);51 //调用cityMap集合方法keySet,键存储到Set集合

52 Set CountyAreaSet =cityMap.keySet();53 Iterator 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>CtiyScenicSpot) {66 //调用CtiyScenicSpot集合entrySet方法,将CtiyScenicSpot集合的键值对关系对象,存储到Set集合

67 Set>> cityNameset =CtiyScenicSpot.entrySet();68 //迭代器迭代Set集合

69 Iterator>> cityNameIt =cityNameset.iterator();70 while(cityNameIt.hasNext()) {71 //cityNameIt.hasNext()方法,取出的是CtiyScenicSpot结合键值对关系对象

72 Entry> cityNameEntry =cityNameIt.next();73 //cityNameEntry方法getkey,getValue

74 String cityNamekey =cityNameEntry.getKey();75 //获取值,值是一个Map集合

76 HashMap classMap =cityNameEntry.getValue();77 //调用集合classMap方法entrySet,键值对关系对象存储Set集合

78 Set> CountyAreaSet =classMap.entrySet();79 //迭代CountyAreaSet集合

80 Iterator> CountyAreaIt =CountyAreaSet.iterator();81 while(CountyAreaIt.hasNext()) {82 //CountyAreaIt.hasNext()获取出来的是cityMap的键,县和区

83 Entry 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 北京--朝阳区--望京SOHO102 北京--大兴区--野生动物园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,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌,存放过程中要求数字大小与斗地主规则的大小对应,将代表不同纸牌的数字分别分配给不同的玩家与底牌。

d>.看牌

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

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

1 /*

2 @author :yinzhengjie3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/

4 EMAIL:y1053419035@qq.com5 */

6

7 packagecn.org.yinzhengjie.note4;8

9 importjava.util.ArrayList;10 importjava.util.Collections;11 importjava.util.HashMap;12

13 public classDouDiZhu {14 public static voidmain(String[] args) {15

16 //1. 组合牌17 //创建Map集合,键是编号,值是牌

18 HashMap pooker = new HashMap();19 //创建List集合,存储编号,该集合有序的特点可以存放相应的int类型。

20 ArrayList pookerNumber = new ArrayList();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 player1 = new ArrayList();49 ArrayList player2 = new ArrayList();50 ArrayList player3 = new ArrayList();51 ArrayList bottom = new ArrayList();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 player,HashMappooker){87 //遍历ArrayList集合,获取元素,作为键,到集合Map中找值

88 System.out.print("[" + name + "]" + "\t:");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 方块3101 [刘亦菲] :小王 黑桃2 红桃2 方块2 黑桃A 黑桃K 黑桃Q 梅花10 红桃9 方块8 黑桃5 红桃5 方块5 黑桃4 梅花4 黑桃3 红桃3102 [邓紫棋] :红桃K 红桃Q 梅花Q 方块Q 黑桃J 梅花J 黑桃10 方块10 黑桃9 梅花9 黑桃8 梅花8 黑桃7 黑桃6 红桃6 方块6 梅花5103 [底牌] :红桃10 红桃4 梅花6104 */

六.集合的总结

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

8ab6a338dfce73d9344b04a12817473f.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JSON是目前常用的数据交换格式之一,而Java中也提供了相关API来处理JSON数据,其中常用的就是JSON和Gson库。通过这两个库,我们可以方便地将JSON格式的字符串转化成Java对象,如集合嵌套集合。 首先,我们需要将JSON格式的字符串转化成JSON对象,可以使用JSON库中的JSONObject类来实现,代码如下所示: ``` String jsonString = "{\"key1\":{\"subKey1\":\"value1\",\"subKey2\":\"value2\"},\"key2\":{\"subKey3\":\"value3\",\"subKey4\":\"value4\"}}"; JSONObject jsonObject = new JSONObject(jsonString); ``` 接下来,我们可以使用Gson库中的TypeToken类来实现集合嵌套集合的转化,代码如下所示: ``` Gson gson = new Gson(); Type type = new TypeToken<Map<String, Map<String, Object>>>(){}.getType(); Map<String, Map<String, Object>> map = gson.fromJson(jsonString, type); ``` 其中,使用TypeToken类可以指定集合嵌套集合的具体类型,这里Map<String, Map<String, Object>>表示外层的Map的key为字符串类型,value为内层的Map,内层的Map的key也为字符串类型,value为Object类型。 最后,我们可以通过遍历Map对象,将集合嵌套集合转化为需要的数据结构,如List嵌套Map的形式,代码如下所示: ``` List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); for (Map.Entry<String, Map<String, Object>> entry : map.entrySet()) { Map<String, Object> subMap = new HashMap<String, Object>(); subMap.put("key", entry.getKey()); subMap.putAll(entry.getValue()); list.add(subMap); } ``` 上述代码中,我们将外层Map的key和内层Map的所有key-value存放到一个新的Map对象中,最后将新的Map对象添加到List中,即可实现集合嵌套集合的转化。 总之,使用JSON和Gson库可以方便地将JSON格式的字符串转化成Java对象,包括集合嵌套集合的转化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值