Java基础-集合的嵌套

                                       作者:尹正杰

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

一.静态导入

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

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note3; import static java.lang.System.out;
import static java.util.Arrays.sort; public class StaticImportDemo {
public static void main(String[] args) {
//发现没有,打印的时候不用写System啦!
out.println("yinzhengjie");
int [] arr = {9,7,5,3,1};
//发现没有,我没有写类名,直接写方法就可以啦!
sort(arr);
for (int i : arr) {
System.out.println(i);
}
}
} /*
以上代码执行结果如下:
yinzhengjie
1
3
5
7
9
*/

二.方法的可变参数

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

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

  可变采参数的注意事项:

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

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

三.Collection工具类

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

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note4; import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List; public class CollectionsDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Y");
list.add("I");
list.add("N");
list.add("zheng");
list.add("jie");
System.out.println(list);
//对List集合,继续升序排序。
Collections.sort(list);
System.out.println(list); }
} /*
以上代码执行结果如下:
[Y, I, N, zheng, jie]
[I, N, Y, jie, zheng]
*/

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

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

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

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note4; import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List; public class CollectionsDemo {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(3);
list.add(5);
list.add(7);
list.add(9);
list.add(11);
System.out.println(list); Collections.shuffle(list); System.out.println(list); }
} /*
以上代码执行结果如下:
[1, 3, 5, 7, 9, 11]
[11, 5, 1, 3, 9, 7]
*/

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

四.集合的嵌套

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

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note4; import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Set; public class MapMapDemo {
public static void main(String[] args) {
//定义安康的集合
HashMap<String, String> ankang = new HashMap<>();
//定义北京的集合
HashMap<String, String> beijing = new HashMap<>();
//定义存放地名的集合
HashMap<String, HashMap<String,String>> CtiyScenicSpot =
new HashMap<String, HashMap<String,String>> ();
//往安康这个集合存放数据
ankang.put("岚皋县", "南宫山");
ankang.put("平利县", "腊肉");
ankang.put("紫阳县", "富硒茶");
ankang.put("汉滨区", "长江大桥");
//往北京这个集合存放数据
beijing.put("大兴区", "野生动物园");
beijing.put("朝阳区", "望京SOHO");
beijing.put("海淀区", "中关村"); //将安康和北京两个集合放入存放地名的集合中去
CtiyScenicSpot.put("安康", ankang);
CtiyScenicSpot.put("北京", beijing);
// keySet(CtiyScenicSpot);
entrySet(CtiyScenicSpot);
} //遍历方式一:通过keySet方式进行遍历
public static void keySet(HashMap<String, HashMap<String,String>> CtiyScenicSpot) {
//调用CtiyScenicSpot集合方法keySet将键存储到Set集合
Set<String> cityNameset = CtiyScenicSpot.keySet();
//迭代Set集合
Iterator<String> cityName = cityNameset.iterator();
while(cityName.hasNext()) {
//获取CtiyScenicSpot集合的键
String cityNameKey = cityName.next();
//CtiyScenicSpot集合的方法get获取值,值是一个HashMap集合
HashMap<String,String> cityMap = CtiyScenicSpot.get(cityNameKey);
//调用cityMap集合方法keySet,键存储到Set集合
Set<String> CountyAreaSet = cityMap.keySet();
Iterator<String> CountyAreaIt = CountyAreaSet.iterator();
while(CountyAreaIt.hasNext()) {
//CountyAreaIt.hasNext()获取出来的是cityMap的键,县和区
String CountyAreaKey = CountyAreaIt.next();
//调用cityMap集合中的get方法取值
String CharacteristicRepresentation = cityMap.get(CountyAreaKey);
System.out.println(cityNameKey+"--"+CountyAreaKey+"--"+CharacteristicRepresentation);
}
}
} //遍历方式二:通过entrySet方式进行遍历
public static void entrySet(HashMap<String, HashMap<String,String>> CtiyScenicSpot) {
//调用CtiyScenicSpot集合entrySet方法,将CtiyScenicSpot集合的键值对关系对象,存储到Set集合
Set<Entry<String, HashMap<String, String>>> cityNameset = CtiyScenicSpot.entrySet();
//迭代器迭代Set集合
Iterator<Entry<String, HashMap<String, String>>> cityNameIt = cityNameset.iterator();
while(cityNameIt.hasNext()) {
//cityNameIt.hasNext()方法,取出的是CtiyScenicSpot结合键值对关系对象
Entry<String, HashMap<String, String>> cityNameEntry = cityNameIt.next();
//cityNameEntry方法getkey,getValue
String cityNamekey = cityNameEntry.getKey();
//获取值,值是一个Map集合
HashMap<String, String> classMap = cityNameEntry.getValue();
//调用集合classMap方法entrySet,键值对关系对象存储Set集合
Set<Entry<String, String>> CountyAreaSet = classMap.entrySet();
//迭代CountyAreaSet集合
Iterator<Entry<String, String>> CountyAreaIt = CountyAreaSet.iterator();
while(CountyAreaIt.hasNext()) {
//CountyAreaIt.hasNext()获取出来的是cityMap的键,县和区
Entry<String, String> CountyAreaEntry = CountyAreaIt.next();
//调用CountyAreaEntry的getKey和getValue方法
String CountyAreaKey = CountyAreaEntry.getKey();
String CountyAreaValue = CountyAreaEntry.getValue();
System.out.println(cityNamekey+"--"+CountyAreaKey+"--"+CountyAreaValue);
} }
}
} /*
以上代码执行结果如下:
安康--岚皋县--南宫山
安康--平利县--腊肉
安康--紫阳县--富硒茶
安康--汉滨区--长江大桥
北京--朝阳区--望京SOHO
北京--大兴区--野生动物园
北京--海淀区--中关村
*/

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

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>.模拟斗地主代码实现

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note4; import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap; public class DouDiZhu {
public static void main(String[] args) { //1. 组合牌
//创建Map集合,键是编号,值是牌
HashMap<Integer,String> pooker = new HashMap<Integer, String>();
//创建List集合,存储编号,该集合有序的特点可以存放相应的int类型。
ArrayList<Integer> pookerNumber = new ArrayList<Integer>();
//定义出13个点数的数组,注意顺序是从大到小
String[] numbers = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
//定义4个花色数组,因为扑克牌就四个花色
String[] colors = {"黑桃","红桃","梅花","方块"};
//定义整数变量,作为键出现,其中0与1索引空出来用于存放大小王。
int index = 2;
//遍历数组,花色+点数的组合,存储到Map集合
for(String number : numbers){
for(String color : colors){
//将扑克牌的索引与对应的扑克牌进行绑定【注意,字符串需要做一个拼接操作】。
pooker.put(index, color+number);
//将编号加入集合中并要自加1.
pookerNumber.add(index++);
}
}
//存储大王,和小王
pooker.put(0, "大王");
pookerNumber.add(0);
pooker.put(1, "小王");
pookerNumber.add(1); //2>洗牌功能
//将牌的编号打乱
Collections.shuffle(pookerNumber); //3>.发牌功能
//将牌编号,发给玩家集合,底牌集合
ArrayList<Integer> player1 = new ArrayList<Integer>();
ArrayList<Integer> player2 = new ArrayList<Integer>();
ArrayList<Integer> player3 = new ArrayList<Integer>();
ArrayList<Integer> bottom = new ArrayList<Integer>(); //发牌采用的是集合索引%3
for(int i = 0 ; i < pookerNumber.size() ; i++){
//先将底牌做好
if(i < 3){
//存到底牌去
bottom.add( pookerNumber.get(i));
//对索引%3判断
}else if(i % 3 == 0){
//索引上的编号,发给玩家1
player1.add( pookerNumber.get(i) );
}else if( i % 3 == 1){
//索引上的编号,发给玩家2
player2.add( pookerNumber.get(i) );
}else if( i % 3 == 2){
//索引上的编号,发给玩家3
player3.add( pookerNumber.get(i) );
}
} //4>.对玩家手中的编号排序
Collections.sort(player1);
Collections.sort(player2);
Collections.sort(player3); //5>.看牌,
//将玩家手中的编号,到Map集合中查找,根据键找值.
look("尹正杰",player1,pooker);
look("刘亦菲",player2,pooker);
look("邓紫棋",player3,pooker);
look("底牌",bottom,pooker);
} //定义看牌的方法
public static void look(String name,ArrayList<Integer> player,HashMap<Integer,String> pooker){
//遍历ArrayList集合,获取元素,作为键,到集合Map中找值
System.out.print("[" + name + "]" + "\t:");
for(Integer key : player){
String value = pooker.get(key);
System.out.print(value+" ");
}
System.out.println();
}
} /*
以上代码执行结果如下:
[尹正杰] :大王 梅花2 红桃A 梅花A 方块A 梅花K 方块K 红桃J 方块J 方块9 红桃8 红桃7 梅花7 方块7 方块4 梅花3 方块3
[刘亦菲] :小王 黑桃2 红桃2 方块2 黑桃A 黑桃K 黑桃Q 梅花10 红桃9 方块8 黑桃5 红桃5 方块5 黑桃4 梅花4 黑桃3 红桃3
[邓紫棋] :红桃K 红桃Q 梅花Q 方块Q 黑桃J 梅花J 黑桃10 方块10 黑桃9 梅花9 黑桃8 梅花8 黑桃7 黑桃6 红桃6 方块6 梅花5
[底牌] :红桃10 红桃4 梅花6
*/

六.集合的总结

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

Java基础-集合的嵌套的更多相关文章

  1. JAVA基础-集合(二)

    一.Map整体结构体系 Map是集合的另一大派系,与Collection派系不同的是Map集合是以键值对儿的形式存储在集合的.两个键为映射关系,其中第一个键为主键(主键是唯一的不可重复),第二个键为v ...

  2. Java基础——集合框架

    Java的集合框架是Java中很重要的一环,Java平台提供了一个全新的集合框架.“集合框架”主要由一组用来操作对象的接口组成.不同接口描述一组不同数据类型.Java平台的完整集合框架如下图所示: 上 ...

  3. Java中集合的嵌套

    集合的嵌套遍历 获取10个1-20之间的随机数,要求不能重复 键盘录入多个数据,以0结束,要求在控制台输出这多个数据的最大值. public static void main(String[] arg ...

  4. java基础---集合(1)

    一. 基本概念 集合.数组都是对多个数据进行存储操作的结构,简称Java容器 数组:长度确定,类型确定,对于添加.删除.插入等操作效率不高,元素有序可重复 Java中集合框架顶层框架是:java.ut ...

  5. Java基础---集合

    第一讲    集合框架 先看下面的图: 这就是集合框架的构成.由于数据结构的不同,有不同的集合,也叫容器.下面是集合类的简单介绍. 一.为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所 ...

  6. Java基础——集合源码解析 List List 接口

    今天我们来学习集合的第一大体系 List. List 是一个接口,定义了一组元素是有序的.可重复的集合. List 继承自 Collection,较之 Collection,List 还添加了以下操作 ...

  7. Java基础—集合

    一.概述 Java中的集合框架主要分为两大派别:Collection 和 Map —— 位于util包下 类的基础关系图如下(图片来自百度) 常用: List——有序可重复 Set——无序不可重复 M ...

  8. java基础集合简介Set(三)中

    今天主要说夏set集合,每天抽出一个小时总结下,生活会更加美好! --< java.util >-- Set接口: 数据结构:数据的存储方式: Set接口中的方法和Collection中方 ...

  9. java基础集合经典训练题

    第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...

随机推荐

  1. 作业一 031502140 博客地址yeze651521

    大一 上学期一开始对于这门课程是懵懵懂懂的,基本不知道自己会不会能够学好,经过了一个学期的努力和老师的教导得到了许多有益的地方,使得我在这门课程的学习上有了大概的掌握,一个学期的学习给予了我很大的能力 ...

  2. Leetcode题库——5.最长回文子串

    @author: ZZQ @software: PyCharm @file: longestPalindrome.py @time: 2018/9/18 20:06 要求:给定一个字符串 s,找到 s ...

  3. 《TCP/IP 详解 卷1:协议》第 9 章:广播和本地组播(IGMP 和 MLD)

    我已经懒了,卷一已经是去年年底看完的,但怎么说卷一的坑开了就要填完啊-- 广播和本地组播(IGMP 和 MLD) 引言 有 4 种 IP 地址,单播(unicast).任播(anycast).组播(m ...

  4. 微服务注册与发现 —— eureka

    基础概念 在微服务系统中,服务的注册和发现是第一步,常用的有: Eureka:https://github.com/Netflix/eureka Zookeeper:https://zookeeper ...

  5. Good Time 冲刺 六

    一.今日完成任务情况 第六天 日期:2018.6.19 王怡镔:今天完善了页面,对部分不足进行改进. 于鑫宇:对界面进行完善. 胡雅馨:今天完成前端页面,并改善后端,完善项目. 黄 鹤:做完最后的打卡 ...

  6. 12_Java面向对象_第12天(构造方法、this、super)_讲义

    今日内容介绍 1.构造方法 2.this关键字 3.super关键字 4.综合案例 01构造方法引入 A:构造方法的引入 在开发中经常需要在创建对象的同时明确对象的属性值, 比如员工入职公司就要明确他 ...

  7. IE8+SpringMVC文件上传防止JSON下载

    今天在IE8测试文件上传的时候发现总是提示下载,原因是上传接口返回的是json,通过以下修改就可以保证返回是json并且不会出现下载的情况: @RequestMapping(value = " ...

  8. 虚拟机VMware中的CentOS字符界面和图形界面切换

    在虚拟机中安装CentOS后展示的界面是图形用户界面,想切换到命令模式,于是查了linux下切换模式的方法,可是按了ctrl+alt+f1.f2....f7都是没用,后来发现是因为按键冲突的原因 问题 ...

  9. 能把opencv的源码也进行调试吗?(需要pdb文件才行)

    能把opencv的源码也进行调试吗?(需要pdb文件才行)1.我是用的Qt Creator,然后"工具\选项\调试器\概要\源码路径映射"中,选择"添加Qt源码" ...

  10. elasticsearch6 学习之安装

    安装环境:centos6.5  64位      jdk1.8      elasticsearch6.1.1 一.启动 [root@localhost bin]# ./elasticsearch - ...