day17Java-Map练习

博客名称
Java-(中级)


在做TreeMap练习的时候想要实现排序,键值一定要实现Comparable或者Comparator就的方法才能实现排序,切记切记。。

HashMap练习1

需求:将下面数据用集合存储,并遍历
为了更符合要求:
这次的数据就看成是学生对象。

bj北京
  			jc	JavSE
  					林青霞		27
  					风清扬		30
  			jy	 JavaEE	
  					赵雅芝		28
  					糖糖		29
sh上海
  			jc	JavSE
  					郭美美		20
  					犀利哥		22
  			jy	JavaEE		
  					罗玉凤		21
  					马征		23
gz广州
  			jc	JavaSE
  					王力宏		30
  					李静磊		32
  			jy	JavaEE
  					郎朗		31
  					柳岩		33
xa西安
  			jc	JavaSE
  					范冰冰		27
  					刘意		30
  			jy	JavaEE
  					李冰冰		28
  					张志豪		29

代码演示

public class HashMapDemo06 {
    public static void main(String[] args) {
        //创建大集合
        HashMap<String, HashMap<String, ArrayList<Student>>> bighm = new HashMap<>();
        //创建中集合1
        HashMap<String, ArrayList<Student>> midhm1 = new HashMap<>();
        //创建小集合1
        ArrayList<Student> minal1 = new ArrayList<>();
        ArrayList<Student> minal2 = new ArrayList<>();
        //创建学生对象
        Student s1 = new Student("林青霞", 27);
        Student s2 = new Student("风清扬", 30);
        Student s3 = new Student(" 赵雅芝", 28);
        Student s4 = new Student(" 糖糖", 29);
        //将学生对象添加到小集合
        minal1.add(s1);
        minal1.add(s2);
        minal2.add(s3);
        minal2.add(s4);
        //将小集合添加到中小集合
        midhm1.put("JavSE", minal1);
        midhm1.put("JavaEE", minal2);
        //将中集合添加到大集合
        bighm.put("北京", midhm1);

        //创建中集合2
        HashMap<String, ArrayList<Student>> midhm2 = new HashMap<>();
        //创建小集合2
        ArrayList<Student> minal3 = new ArrayList<>();
        ArrayList<Student> minal4 = new ArrayList<>();
        //创建学生对象
        Student s5 = new Student("郭美美", 20);
        Student s6 = new Student("犀利哥", 22);
        Student s7 = new Student("罗玉凤", 21);
        Student s8 = new Student("马征", 23);
        //将学生对象添加到小集合
        minal3.add(s5);
        minal3.add(s6);
        minal4.add(s7);
        minal4.add(s8);
        //将小集合添加到中小集合
        midhm2.put("JavaSE", minal3);
        midhm2.put("JavaEE", minal4);
        //将中集合添加到大集合
        bighm.put("上海", midhm2);

        //创建中集合3
        HashMap<String, ArrayList<Student>> midhm3 = new HashMap<>();
        //创建小集合3
        ArrayList<Student> minal5 = new ArrayList<>();
        ArrayList<Student> minal6 = new ArrayList<>();
        //创建学生对象
        Student s9 = new Student("王力宏", 30);
        Student s10 = new Student("李静磊", 32);
        Student s11 = new Student("郎朗", 31);
        Student s12 = new Student("柳岩", 33);
        //将学生对象添加到小集合
        minal5.add(s9);
        minal5.add(s10);
        minal6.add(s11);
        minal6.add(s12);
        //将小集合添加到中集合
        midhm3.put("JavaSE", minal5);
        midhm3.put("JavaEE", minal6);
        //将中集合添加到大集合
        bighm.put("广州", midhm3);

        //创建中集合4
        HashMap<String, ArrayList<Student>> midhm4 = new HashMap<>();
        //创建小集合4
        ArrayList<Student> minal7 = new ArrayList<>();
        ArrayList<Student> minal8 = new ArrayList<>();
        //创建学生对象
        Student s13 = new Student("范冰冰", 27);
        Student s14 = new Student("杨颖", 30);
        Student s15 = new Student("李冰冰", 28);
        Student s16 = new Student("卢本伟", 29);
        //将学生对象添加到小集合
        minal7.add(s13);
        minal7.add(s14);
        minal8.add(s15);
        minal8.add(s16);
        //将小集合添加到中集合
        midhm4.put("JavaSE",minal7);
        midhm4.put("JavaEE",minal8);
        //将中集合添加到大集合
        bighm.put("西安", midhm4);

        //方式1:获取键集合遍历
        for(String key:bighm.keySet()){
            System.out.println(key);
            HashMap<String, ArrayList<Student>> midhm = bighm.get(key);
            for(String midkey:midhm.keySet()){
                System.out.println("\t"+midkey);
                ArrayList<Student> minal = midhm.get(midkey);
                for (Student minkey:minal){
                    System.out.println("\t\t"+minkey.getName()+"\t"+minkey.getAge());
                }
            }
        }
        System.out.println("-----------------------------------------------");
        //方式2:获取键值对对象集合遍历
        for(Map.Entry<String, HashMap<String, ArrayList<Student>>> bigme:bighm.entrySet()){
            System.out.println(bigme.getKey());
            HashMap<String, ArrayList<Student>> minhm = bigme.getValue();
            for(Map.Entry<String,ArrayList<Student>> midme:minhm.entrySet()){
                System.out.println("\t"+midme.getKey());
                ArrayList<Student> minal = midme.getValue();
                for(Student minkey:minal){
                    System.out.println("\t\t"+minkey.getName()+"\t"+minkey.getAge());
                }
            }
        }
    }
}

结果:

上海
	JavaSE
		郭美美	20
		犀利哥	22
	JavaEE
		罗玉凤	21
		马征	23
广州
	JavaSE
		王力宏	30
		李静磊	32
	JavaEE
		郎朗	31
		柳岩	33
西安
	JavaSE
		范冰冰	27
		杨颖	30
	JavaEE
		李冰冰	28
		卢本伟	29
北京
	JavSE
		林青霞	27
		风清扬	30
	JavaEE
		 赵雅芝	28
		 糖糖	29
-----------------------------------------------
上海
	JavaSE
		郭美美	20
		犀利哥	22
	JavaEE
		罗玉凤	21
		马征	23
广州
	JavaSE
		王力宏	30
		李静磊	32
	JavaEE
		郎朗	31
		柳岩	33
西安
	JavaSE
		范冰冰	27
		杨颖	30
	JavaEE
		李冰冰	28
		卢本伟	29
北京
	JavSE
		林青霞	27
		风清扬	30
	JavaEE
		 赵雅芝	28
		 糖糖	29
Map集合练习2统计字符串字母数量

需求1:aababcabcdabcde",获取字符串中每一个字母出现的次数要求结果:a(5)b(4)c(3)d(2)e(1)

分析:
    1.创建键盘录入对象,并录入数据
    2.创建录入的字符串数据转为字符数组
    3.创建集合对象,用于存储数据
    4.遍历字符数组
    5:在根据键获取键的值,获取的值可能
           是null
               put(key,1);
         不是null
               value++;
               put(key,value)
    6:创建StringBuffer对象
    7.遍历TreeMap集合
    8.将集合中元素,append到StringBuffer对象中

代码演示

public class TreeMapDemo03 {
    public static void main(String[] args) {

        //根据题目的要求我将字符串转化成键盘录入
        Scanner sc = new Scanner(System.in);
        char[] chars = sc.nextLine().toCharArray();
        //创建集合对象
        TreeMap<Character, Integer> tm = new TreeMap<>();

        //遍历 数组
        for (char chs : chars) {
            Integer i = tm.get(chs);
            if (i == null) {
                tm.put(chs, 1);
            } else {
                i++;
                tm.put(chs, i);
            }
        }

        StringBuffer sb = new StringBuffer();

        //方式1:获取键集合遍历
        for (Character key : tm.keySet()) {
            sb.append(key).append("(").append(tm.get(key)).append(")");
        }
        System.out.println("sb--"+sb);
        System.out.println("------------------------");

        StringBuffer sb2 = new StringBuffer();
        //方式2:获取键值对对象集合遍历
        for (Map.Entry<Character, Integer> me : tm.entrySet()) {
            sb2.append(me.getKey()).append("(").append(me.getValue()).append(")");
        }
        System.out.println("sb2--"+sb2);
    }
}

结果:

aababcabcdabcde
sb--a(5)b(4)c(3)d(2)e(1)
------------------------
sb2--a(5)b(4)c(3)d(2)e(1)

统计字符串字母数量图解

HashMap嵌套HashMap练习3

需求2:HashMap嵌套HashMap
Java
JavaSE
格雷福斯 20
影流之主 22
JavaEE
至高之拳 21
落入狂沙 23
先存储元素,然后遍历元素

代码演示

public class TreeMapDemo04 {
    public static void main(String[] args) {
        //创建大集合
        HashMap<String,HashMap<String,Integer>>  bighm = new HashMap<>();

        //创建小集合1
        HashMap<String,Integer> minhm1 = new HashMap<>();
        minhm1.put("格雷福斯",20);
        minhm1.put("影流之主",22);
        //将小集合添加到大集合
        bighm.put("JavaSE",minhm1);

        //创建小集合2
        HashMap<String,Integer> minhm2 = new HashMap<>();
        minhm2.put("至高之拳",21);
        minhm2.put("落日狂沙",23);
        //将小集合添加到大集合
        bighm.put("JavaEE",minhm2);

        //方式1:获取键集合遍历
        for (String key:bighm.keySet()){
            System.out.println(key);
            HashMap<String, Integer> minhm = bighm.get(key);
            for(String minkey:minhm.keySet()){
                System.out.println("\t"+minkey+"\t"+minhm.get(minkey));
            }
        }
        System.out.println("------------------------");
        //方式2:获取键值对对象集合遍历
        for(Map.Entry<String,HashMap<String,Integer>> me:bighm.entrySet()){
            System.out.println(me.getKey());
            HashMap<String, Integer> minhm = me.getValue();
            for(Map.Entry<String, Integer> mingme:minhm.entrySet()){
                System.out.println("\t"+mingme.getKey()+"\t"+mingme.getValue());
            }
        }
    }
}

结果:

JavaSE
	影流之主	22
	格雷福斯	20
JavaEE
	落日狂沙	23
	至高之拳	21
------------------------
JavaSE
	影流之主	22
	格雷福斯	20
JavaEE
	落日狂沙	23
	至高之拳	21
HashMap嵌套ArrayList练习4

需求:假设HashMap集合的元素是ArrayList。有3个。
每一个ArrayList集合的值是字符串。
元素我已经完成,请遍历。
结果:
三国演义
吕布
周瑜
笑傲江湖
令狐冲
林平之
神雕侠侣
郭靖
杨过

代码演示

public class TreeMapDemo05 {
    public static void main(String[] args) {
        //创建大集合
        HashMap<String,ArrayList<String>> bighm = new HashMap<>();

        //创建小集合1
        ArrayList<String> al1 = new ArrayList<>();
        al1.add("吕布");
        al1.add("周瑜");
        //将小集合添加大集合
        bighm.put("三国演义",al1);

        //创建集合2
        ArrayList<String> al2 = new ArrayList<>();
        al2.add("令狐冲");
        al2.add("林平之");
        //将小集合添加大集合
        bighm.put("笑傲江湖",al2);

        //创建集合3
        ArrayList<String> al3 = new ArrayList<>();
        al3.add("郭靖");
        al3.add("杨过");
        bighm.put("神雕侠侣",al3);

        //方式1:获取键集合遍历
        for(String key:bighm.keySet()){
            System.out.println(key);
            ArrayList<String> alValue = bighm.get(key);
            for(String valueKey:alValue){
                System.out.println("\t"+valueKey);
            }

        }
        System.out.println("---------------------------------------");
        //方式2:获取键值对对象集合遍历
        for(Map.Entry<String,ArrayList<String>> me:bighm.entrySet()){
            System.out.println(me.getKey());
            ArrayList<String> alList = me.getValue();
            for (String key:alList){
                System.out.println("\t"+key);
            }
        }
    }
}

结果:

神雕侠侣
	郭靖
	杨过
三国演义
	吕布
	周瑜
笑傲江湖
	令狐冲
	林平之
---------------------------------------
神雕侠侣
	郭靖
	杨过
三国演义
	吕布
	周瑜
笑傲江湖
	令狐冲
	林平之
ArrayList嵌套HashMap练习4

ArrayList集合嵌套HashMap集合并遍历。
需求:
假设ArrayList集合的元素是HashMap。有3个。
每一个HashMap集合的键和值都是字符串。
元素我已经完成,请遍历。
结果:
周瑜—小乔
吕布—貂蝉

	 郭靖---黄蓉
	 杨过---小龙女
	
	 令狐冲---任盈盈
	 林平之---岳灵珊

代码演示

public class HashMap06 {
    public static void main(String[] args) {
        //创建大集合
        ArrayList<HashMap<String,String>> bigal = new ArrayList<>();

        //创建小集合
        HashMap<String,String> hm = new HashMap<>();
        hm.put("周瑜","小乔");
        hm.put("吕布","貂蝉");
        //将小集合添加到大集合
        bigal.add(hm);

        //创建小集合
        HashMap<String,String> hm1 = new HashMap<>();
        hm1.put("郭靖","黄蓉");
        hm1.put("杨过","小龙女");
        //将小集合添加到大集合
        bigal.add(hm1);

        //创建小集合
        HashMap<String,String> hm2 = new HashMap<>();
        hm2.put("令狐冲","任盈盈");
        hm2.put("林平之","岳灵珊");
        //将小集合添加到大集合
        bigal.add(hm2);

        //方式1:获取键集合遍历
        for(HashMap<String,String> key:bigal){
            for (String valueKey:key.keySet()){
                System.out.println(valueKey+"----"+key.get(valueKey));
            }
        }
        System.out.println("----------------------------");
        //方式2:获取键值对对象集合
        for(HashMap<String,String> key:bigal){
           for(Map.Entry<String,String> me:key.entrySet()){
               System.out.println(me.getKey()+"----"+me.getValue());
           }
        }
    }
}

结果:

吕布----貂蝉
周瑜----小乔
杨过----小龙女
郭靖----黄蓉
令狐冲----任盈盈
林平之----岳灵珊
----------------------------
吕布----貂蝉
周瑜----小乔
杨过----小龙女
郭靖----黄蓉
令狐冲----任盈盈
林平之----岳灵珊
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值