Map集合和其它集合嵌套的案例、以及Map集合和Map集合嵌套的案例
案例1:Map和ArrayList的嵌套
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map.Entry;
//Map和ArrayList的嵌套使用案例
public class TestMapArrayList {
public static void main(String[] args) {
//一个游戏内有多个角色,如何构建对应关系
//两种集合嵌套的声明
HashMap<String , ArrayList<String>> gameMap = new HashMap<>();
//创建Map集合的键值对
ArrayList<String> list1 = new ArrayList<String>();
list1.add("吉姆 雷诺");
list1.add("凯瑞甘");
list1.add("阿塔尼斯");
gameMap.put("星际争霸Ⅱ", list1);
ArrayList<String> list2 = new ArrayList<String>();
list2.add("萨尔");
list2.add("瓦里安");
gameMap.put("魔兽世界", list2);
ArrayList<String> list3 = new ArrayList<String>();
list3.add("麦克雷");
list3.add("D.Va");
gameMap.put("守望先锋", list3);
//遍历Map
for (Entry<String , ArrayList<String>> entry: gameMap.entrySet()) {
System.out.println(entry.getKey());
ArrayList<String> value = entry.getValue();
for (String v : value) {
System.out.println("\t" + v);
}
}
}
}
运行结果:
星际争霸Ⅱ
吉姆 雷诺
凯瑞甘
阿塔尼斯
魔兽世界
萨尔
瓦里安
守望先锋
麦克雷
D.Va
不仅可以存储String信息,也可以是一个完整的对象,经过多层的嵌套,可以形成一个庞大且清晰的数据格式;
案例2:Map和Map的嵌套
import java.util.HashMap;
import java.util.Scanner;
//一个Map和Map嵌套的案例
public class TestDoubleMap {
public static void main(String[] args) {
//如果你想为一个信息进行双重加密,如何实现?
Scanner input = new Scanner(System.in);
//创建信息及内层加密
HashMap<Integer , String> secret = new HashMap<Integer , String>();
secret.put(123456, "LOL中婕拉击杀塞恩,或者塞恩被婕拉击杀时,击杀者会额外多2金币--\"植物大战僵尸\":)");
//第一层加密
HashMap<Integer , HashMap<Integer , String>> secret2 = new HashMap<Integer , HashMap<Integer , String>>();
secret2.put(654321, secret);
//加密过程
while(true) {
System.out.println("请输入第一层密码:");
int pwd1 = input.nextInt();
HashMap<Integer , String> map = secret2.get(pwd1);
if(map != null) {
while(true) {
System.out.println("请输入第二层密码:");
int pwd2 = input.nextInt();
String result = secret.get(pwd2);
if(result != null) {
System.out.println("秘密是:"+result);
break;
}
System.out.println("第二层密码输入错误,请重新输入!");
}
break;
}
System.out.println("第一层密码输入错误,请重新输入!");
}
}
}
输出结果:
请输入第一层密码:
654
第一层密码输入错误,请重新输入!
请输入第一层密码:
654321
请输入第二层密码:
123
第二层密码输入错误,请重新输入!
请输入第二层密码:
123456
秘密是:LOL中婕拉击杀塞恩,或者塞恩被婕拉击杀时,击杀者会额外多2金币--"植物大战僵尸":)
也可以进行更多重的加密,或者在每层中存储更多不同的信息。