4-10红黑树、HashSet、Map集合嵌套练习

package T07_集合嵌套练习;

import java.util.ArrayList;
import java.util.HashMap;

public class D1_List嵌套List {
/*
需求:有两个队伍的姓名需要存储,不能存储到同一个集合里。
第一个队伍: 罗志祥 陈羽凡 文章 陈赫
第二个队伍: 马蓉 白百何 李小璐 蔡徐坤
*/
public static void main(String[] args) {
创建第一个集合 存储 罗志祥 陈羽凡 文章 陈赫
ArrayList s1 = new ArrayList<>();
s1.add(“罗志祥”);
s1.add(“陈羽凡”);
s1.add(“文章”);
s1.add(“陈赫”);

    //创建第二个集合存储 马蓉 白百何 李小璐 蔡徐坤
    ArrayList<String> s2 = new ArrayList<>();
    s2.add("马蓉");
    s2.add("白百何");
    s2.add("李小璐");
    s2.add("蔡徐坤");
    //创建第三个集合用于存储两队人马
    ArrayList<ArrayList<String>> s3 = new ArrayList<>();
    s3.add(s1);
    s3.add(s2);

    //遍历第三个大集合,打印所有人
    for (ArrayList<String> strings : s3) {
        for (String string : strings) {
            System.out.println(string);
        }
    }
}

}


package T07_集合嵌套练习;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;

public class D2_List嵌套Map {
/*
需求:有两个队伍的姓名需要保存,每一个都是丈夫和夫妻的一一对应的关系。
第一个队伍:罗志祥-蝴蝶 陈羽凡-白百何 文章-姚笛
第二个队伍:令狐冲-小尼姑 张无忌-赵敏 郭靖-黄蓉
*/
public static void main(String[] args) {
//创建第一个HashMap集合存 罗志祥-蝴蝶 陈羽凡-白百何 文章-姚笛
HashMap<String, String> s1 = new HashMap<>();
s1.put(“罗志祥”,“蝴蝶”);
s1.put(“陈羽凡”,“白百何”);
s1.put(“文章”,“姚笛”);

    //创建第二个HashMap集合存 令狐冲-小尼姑  张无忌-赵敏       郭靖-黄蓉
    HashMap<String, String> s2 = new HashMap<>();
    s1.put("令狐冲","小尼姑");
    s1.put("张无忌","赵敏");
    s1.put("郭靖","黄蓉");

    //创建一个List集合,把前面两个map集合添加进去
  //  HashMap<HashMap<String, String>> s3 = new HashMap<>();              //错误演示
    ArrayList<HashMap<String,String>> s3 = new ArrayList<>();
    //添加
    s3.add(s1);
    s3.add(s2);
    //先遍历list集合,再遍历里面的Map,打印所有的夫妻对
    for (HashMap<String, String> s4 : s3) {
        Set<String> set = s4.keySet();
        for (String s : set) {
            String s5 = s4.get(s);
            System.out.println(s+"..."+s5);
        }
    }
}

}


package T07_集合嵌套练习;

import java.util.HashMap;
import java.util.Set;

public class D3_Map嵌套Map {
/*
需求:有两个队伍的姓名需要保存,每一个都是丈夫和夫妻的一一对应的关系,并且要记录每个队伍的队名。
第一个队伍(现代队):罗志祥-蝴蝶 陈羽凡-白百何 文章-姚笛
第二个队伍(古代队):令狐冲-小尼姑 张无忌-赵敏 郭靖-黄蓉
*/
public static void main(String[] args) {
//创建第一个HashMap集合存 罗志祥-蝴蝶 陈羽凡-白百何 文章-姚笛
HashMap<String, String> s1 = new HashMap<>();
s1.put(“罗志祥”,“蝴蝶”);
s1.put(“陈羽凡”,“白百何”);
s1.put(“文章”,“姚笛”);

    //创建第二个HashMap集合存 令狐冲-小尼姑  张无忌-赵敏  郭靖-黄蓉
    HashMap<String, String> s2= new HashMap<>();
    s2.put("令狐冲","小尼姑");
    s2.put("张无忌","赵敏");
    s2.put("郭靖","黄蓉");

    //创建第三个HashMap集合保存两个集合以及他们的队名
    HashMap<String,HashMap<String,String>> map = new HashMap<>();//与上题的区别在于添加了String"队名"!注意格式
    //添加
    map.put("现代队",s1);
    map.put("古代队",s2);

    //遍历这个嵌套的集合。因为是两层map集合,所以需要两次keySet()
    Set<String> names = map.keySet();
    for (String name : names) {
        System.out.println(name);
        //根据队名获取到相应的map集合
        HashMap<String, String> map1 = map.get(name);
        Set<String> map2 = map1.keySet();
        for (String map3 : map2) {
          //  String s4 = map1.get(map3);
          //  System.out.println(map3+".."+s4);
            System.out.println(map3 + "..." + map1.get(map3));
        }
    }
}

}


package com.wuhuqifei_07;

import java.util.ArrayList;
import java.util.Collections;

public class PokerDemo01 {

public static void main(String[] args) {
    //创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现
    ArrayList<String> array = new ArrayList<String>();
    //往牌盒里面装牌
    /*
    2,3,4...K,A
    2,...
    2,...
    2,...
    小王,大王
    */

    //定义花色数组
    String[] colors = {"♦", "♣", "♠", "♥"};
    //定义点数数组
    String[] numbers = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};

    for (String color : colors) {
        for (String number : numbers) {
            array.add(color + number);
        }
    }
    array.add("小王");
    array.add("大王");

    //洗牌,也就是把牌打撒,用Collections的shuffle()方法实现
    Collections.shuffle(array);
    // System.out.println(array);

    //发牌,也就是遍历集合,给三个玩家发牌
    ArrayList<String> lqxArray = new ArrayList<String>();
    ArrayList<String> lyArray = new ArrayList<String>();
    ArrayList<String> fqyArray = new ArrayList<String>();
    ArrayList<String> dpArray = new ArrayList<String>();

    for (int i = 0; i < array.size(); i++) {
        String poker = array.get(i);
        if (i >= array.size() - 3) {
            dpArray.add(poker);
        } else if (i % 3 == 0) {
            lqxArray.add(poker);
        } else if (i % 3 == 1) {
            lyArray.add(poker);
        } else if (i % 3 == 2) {
            fqyArray.add(poker);
        }
    }

    //看牌,也就是三个玩家分别遍历自己的牌
    lookPoker("张三", lqxArray);
    lookPoker("李四", lyArray);
    lookPoker("王五", fqyArray);
    lookPoker("底牌", dpArray);
}

//看牌的方法
public static void lookPoker(String name, ArrayList<String> array) {
    System.out.print(name + "的牌是:");
    for (String poker : array) {
        System.out.print(poker + " ");
    }
    System.out.println();
}

}


一、现在有一个map集合如下:
Map<Integer,String> map = new HashMap<Integer, String>();
map.put(1, “张三丰”);
map.put(2, “周芷若”);
map.put(3, “汪峰”);
map.put(4, “灭绝师太”);
要求:
1.遍历集合,并将序号与对应人名打印。
2.向该map集合中插入一个编码为5姓名为李晓红的信息
3.移除该map中的编号为1的信息
4.将map集合中编号为2的姓名信息修改为"周林"

public static void main(String[] args) {
// 1.定义HashMap,编号作为key,姓名作为value
Map<Integer,String> map = new HashMap<Integer, String>();

// 2.使用put方法添加元素
map.put(1, "张三丰");
map.put(2, "周芷若");
map.put(3, "汪峰");
map.put(4, "灭绝师太");

// 3.使用keySet+增强for迭代map中的元素,并打印
Set<Integer> keySet = map.keySet();
for (Integer key : keySet) {
	String value = map.get(key);
	System.out.println(key + " -- "+ value);
}

// 4.使用put向该map集合中插入一个编码为5姓名为李晓红的信息
map.put(5, "李晓红");

// 5.使用remove移除该map中的编号为1的信息
map.remove(1);

// 6.使用put将map集合中编号为2的姓名信息修改为"周林"
map.put(2, "周林");
System.out.println(map);

}

二、 分析以下需求,并用代码实现

  1. 统计每个单词出现的次数
  2. 有如下字符串"If you want to change your fate I think you must come to the dark horse to learn java"(用空格间隔)
  3. 打印格式:
    to=3
    think=1
    you=2

public class Task02 {
public static void main(String[] args) {
String s = “If you want to change your fate I think you must come to the dark horse to learn java”;
String[] arr = s.split(" ");

	Map<String, Integer> map = new HashMap<>();

	for (String s1 : arr) {
		map.put(s1, map.containsKey(s1) ? map.get(s1) + 1 : 1);
	}

	for (Map.Entry<String, Integer> entry : map.entrySet()) {
		System.out.println(entry.getKey() + "=" + entry.getValue());
	}
}

}

/*

  • 3.1. 产生10个1-20之间的随机数要求随机数不能重复
    */
    public class Test01 {
    public static void main(String[] args) {
    //创建set集合
    HashSet hs = new HashSet<>();

     //循环添加元素
     while (hs.size() < 10) {
         Random r = new Random();
         int num =  r.nextInt(20) + 1;
         hs.add(num);//自动装箱
     }
    
     //打印结果
     System.out.println(hs);
    

    }
    }

/*
3.2.产生10个长度为10的不能重复的字符串(里面只能出现大写字母、小写字母、0-9的数字),并遍历打印输出
*/
public class Test02 {
public static void main(String[] args) {

    HashSet<String> hs = new HashSet<>();

    Random r = new Random();

    while (hs.size() < 11) {

        // 获取字符串,内容为大写字母+小写字母+数字
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i <= 9; i++) {
            sb.append(i);
        }
        for (char i = 'a'; i <= 'z'; i++) {
            sb.append(i);
        }
        for (char i = 'A'; i <= 'Z'; i++) {
            sb.append(i);
        }
        String s = sb.toString();

        // 循环产生长度为10的字符串
        StringBuilder sb2 = new StringBuilder();
        for (int i = 0; i < 10; i++) {
            int random = r.nextInt(62);
            sb2.append(s.charAt(random));
        }

        //存入集合中
        hs.add(sb2.toString());
    }

    System.out.println(hs);

}

}

四、双色球规则:双色球每注投注号码由6个红色球号码和1个蓝色球号码组成。红色球号码从1—33中选择;蓝色球号码从1—16中选择;请随机生成一注双色球号码。(要求同色号码不重复)
public class HashSetTest02 {
public static void main(String[] args) {
// 1.创建Random随机数对象
Random ran = new Random();

    // 2.创建HashSet用于保存不重复的红球
    HashSet<Integer> hs = new HashSet<>();

    // 3.死循环
    while (true) {
        // 4球数量小于6个就产生一个红球.添加到HashSet中
        // 5.如果产生重复号码,往HashSet里添加不进去,所以会再次生成号码
        int num = ran.nextInt(33) + 1;
        hs.add(num);
        //元素个数有6个就,退出循环
        if (hs.size() == 6) {
            break;
        }
    }
    // 6.再生成一个篮球
    int blueBall = ran.nextInt(16) + 1;

    // 7.打印中奖号码
    System.out.println("双色球中奖号码:");
    System.out.print("红球是: ");

    for (Integer redBall : hs) {
        System.out.print(redBall + " ");
    }
    System.out.println();
    System.out.println("蓝球是: " + blueBall);
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值