JavaSE学习笔记 集合练习题归总

1.键盘录入3个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控制台。

解题思路:


1.创建1个学生类
2.创建1个TreeSet集合对象(使用自然排序或者比较器排序皆可)
3.键盘录入学生的数据,然后把学生的数据封装成一个学生对象,再把学生对象添加到集合中
4.遍历集合

方法1:使用TreeSet的空参构造进行自然排序

public class Student  implements Comparable<Student>{
    private String name;
    private int ChineseScore;
    private int MathScore;
    private int EnglishScore;

    public Student() {
    }

    public Student(String name, int chineseScore, int mathScore, int englishScore) {
        this.name = name;
        ChineseScore = chineseScore;
        MathScore = mathScore;
        EnglishScore = englishScore;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getChineseScore() {
        return ChineseScore;
    }

    public void setChineseScore(int chineseScore) {
        ChineseScore = chineseScore;
    }

    public int getMathScore() {
        return MathScore;
    }

    public void setMathScore(int mathScore) {
        MathScore = mathScore;
    }

    public int getEnglishScore() {
        return EnglishScore;
    }

    public void setEnglishScore(int englishScore) {
        EnglishScore = englishScore;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", ChineseScore=" + ChineseScore +
                ", MathScore=" + MathScore +
                ", EnglishScore=" + EnglishScore +
                '}';
    }

    //定义语文数学英语的总和
    public int sumScore(){
        return ChineseScore+MathScore+EnglishScore;
    }

    @Override
    public int compareTo(Student stu) {
        //比较两个对象的总和
        int num = sumScore() - stu.sumScore();
        //如果两个对象的总分相同,比较两个对象的姓名
        int num2=num==0?this.name.compareTo(stu.name):num;
        return -num2;
    }
}


//测试类:
public class MyTest {
    public static void main(String[] args) {
        /*需求:键盘录入3个学生信息(姓名,语文成绩,数学成绩,英语成绩),
          按照总分从高到低输出到控制台。
         */
        TreeSet<Student> set = new TreeSet<>();

        for (int i = 1; i <= 3; i++) {
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入第"+i+"学生的姓名:");
            String name = scanner.nextLine();
            Student student = new Student();
            student.setName(name);

            System.out.println("请输入第"+i+"学生的语文成绩:");
            int yw = scanner.nextInt();
            student.setChineseScore(yw);

            System.out.println("请输入第"+i+"学生的数学成绩:");
            int sx= scanner.nextInt();
            student.setMathScore(sx);

            System.out.println("请输入第"+i+"学生的英语成绩:");
            int yy= scanner.nextInt();
            student.setEnglishScore(yy);

            set.add(student);
        }


        int index = 1;
        for (Student student : set) {
            System.out.println("序号:"+(index++) + "\t" +"姓名:"+ student.getName() + "\t" +"语文成绩:"+
                    student.getChineseScore() + "\t" +"数学成绩:"+ student.getMathScore() + "\t" + "英语成绩:"
                    +student.getEnglishScore() + "\t" +"总分为:"+ student.sumScore());
        }
    }
}


运行后的结果为:

在这里插入图片描述


方法2:使用TreeSet的有参构造比较器进行比较

学生类:
public class Student  {
    private String name;
    private int ChineseScore;
    private int MathScore;
    private int EnglishScore;

    public Student() {
    }

    public Student(String name, int chineseScore, int mathScore, int englishScore) {
        this.name = name;
        ChineseScore = chineseScore;
        MathScore = mathScore;
        EnglishScore = englishScore;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getChineseScore() {
        return ChineseScore;
    }

    public void setChineseScore(int chineseScore) {
        ChineseScore = chineseScore;
    }

    public int getMathScore() {
        return MathScore;
    }

    public void setMathScore(int mathScore) {
        MathScore = mathScore;
    }

    public int getEnglishScore() {
        return EnglishScore;
    }

    public void setEnglishScore(int englishScore) {
        EnglishScore = englishScore;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", ChineseScore=" + ChineseScore +
                ", MathScore=" + MathScore +
                ", EnglishScore=" + EnglishScore +
                '}';
    }

    //定义语文数学英语的总和
    public int sumScore(){
        return ChineseScore+MathScore+EnglishScore;
    }
    }

//测试类:
import java.util.Comparator;
import java.util.Scanner;
import java.util.TreeSet;

public class MyTest {
    public static void main(String[] args) {
        //利用比较器进行排序,需要重写compare方法
        TreeSet<Student> treeSet = new TreeSet<>(new Comparator<Student>() {
            @Override
            public int compare(Student s1, Student s2) {
                //按照总分进行排序
                int num = s1.sumScore() - s2.sumScore();
                //总分相同比较姓名
                int num2=num==0?s1.getName().compareTo(s2.getName()):num;
                return -num2;
            }
        });
        for (int i = 1; i <= 3; i++) {
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入第"+i+"学生的姓名:");
            String name = scanner.nextLine();
            Student student = new Student();
            student.setName(name);

            System.out.println("请输入第"+i+"学生的语文成绩:");
            int yw = scanner.nextInt();
            student.setChineseScore(yw);

            System.out.println("请输入第"+i+"学生的数学成绩:");
            int sx= scanner.nextInt();
            student.setMathScore(sx);

            System.out.println("请输入第"+i+"学生的英语成绩:");
            int yy= scanner.nextInt();
            student.setEnglishScore(yy);

            treeSet.add(student);
        }

        int index = 1;
        for (Student student : treeSet) {
            System.out.println("序号:"+(index++) + "\t" +"姓名:"+ student.getName() + "\t" +"语文成绩:"+
                    student.getChineseScore() + "\t" +"数学成绩:"+ student.getMathScore() + "\t" + "英语成绩:"
                    +student.getEnglishScore() + "\t" +"总分为:"+ student.sumScore());
        }


    }
}



运行后的结果为:
在这里插入图片描述


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

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class MyTest {
    public static void main(String[] args) {
        /*
         统计字符串中每个字符出现的次数"aababcabcdabcde",
         获取字符串中每一个字母出现的次数要求结果:a(5)b(4)c(3)d(2)e(1)
         案例演示:
        需求:统计字符串中每个字符出现的次数
        "aababcabcdabcde", 获取字符串中每一个字母出现的次数要求结果:a(5) b(4) c(3) d(2) e(1)

        a-----5
        b-----4
        c-----3
        d-----2
        e-----1
        我们观察发现 这是一种 键值对应关系的数据
        对于这种数据我们可以采用双列集合存储集合
        遍历双列集合,拼接字符串。

         */

        HashMap<Character, Integer> map = new HashMap<>();
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入字符串:");
        String s = scanner.nextLine();


        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            //判断这个键是不是第一次出现,如果不是,就存进去,值给个1
            if(!map.containsKey(ch)){
                map.put(ch,1);
            }else{
                //获取出上一次的值,累加一次,再存进去,键相同,值覆盖
                Integer value = map.get(ch);
                value++;
                //键相同,值覆盖
                map.put(ch,value);
            }

        }

        StringBuffer sb = new StringBuffer();

        Set<Map.Entry<Character, Integer>> entries = map.entrySet();
        for (Map.Entry<Character, Integer> entry : entries) {
            Character key = entry.getKey();
            Integer value = entry.getValue();
            sb.append(key).append("(").append(value).append(")");
        }


        String str = sb.toString();
        System.out.println(str);

    }
}

运行后的结果为:
在这里插入图片描述


3.集合嵌套之HashMap嵌套HashMap

集合嵌套之HashMap嵌套HashMap

用集合存储下面元素,并进行遍历出如下结果:
	   基础班
​			张三		20
​			李四		22
​	   就业班
​			王五		21
​			赵六		23
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;

public class MyTest {
    public static void main(String[] args) {
       /*       基础班
​					张三		20
​					李四		22
​				 就业班
​					王五		21
​					赵六		23

        */
        HashMap<String, Integer> JcMap = new HashMap<>();
        JcMap.put("张三",20);
        JcMap.put("李四",22);

        HashMap<String, Integer> JyMap = new HashMap<>();
        JyMap.put("王五",21);
        JyMap.put("赵六",23);


        HashMap<String, HashMap<String, Integer>> MaxMap = new HashMap<>();
        MaxMap.put("基础班",JcMap);
        MaxMap.put("就业班",JyMap);
        //遍历方式1:通过keyset方式进行遍历
        Set<String> keySet = MaxMap.keySet();
        for (String key : keySet) {
            System.out.println(key);
            HashMap<String, Integer> hashMap = MaxMap.get(key);
            Set<String> map = hashMap.keySet();
            for (String key1 : map) {
                Integer integer = hashMap.get(key1);
                System.out.println("\t"+key1+"   "+integer);
            }

        }
        System.out.println("================");

        //遍历方式2:通过entryset方式进行遍历
        Set<Map.Entry<String, HashMap<String, Integer>>> entries = MaxMap.entrySet();
        for (Map.Entry<String, HashMap<String, Integer>> entry : entries) {
            String key = entry.getKey();
            System.out.println(key);
            HashMap<String, Integer> value = entry.getValue();

            Set<Map.Entry<String, Integer>> entries1 = value.entrySet();
            for (Map.Entry<String, Integer> stringIntegerEntry : entries1) {
                String key1 = stringIntegerEntry.getKey();
                Integer value1 = stringIntegerEntry.getValue();
                System.out.println("\t"+key1+"   "+value1);

            }
        }
        System.out.println("==================");

        //遍历方式三:通过foreach方法进行遍历
        MaxMap.forEach(new BiConsumer<String, HashMap<String, Integer>>() {
            @Override
            public void accept(String s, HashMap<String, Integer> stringIntegerHashMap) {
                System.out.println(s);
                stringIntegerHashMap.forEach(new BiConsumer<String, Integer>() {
                    @Override
                    public void accept(String key, Integer value) {
                        System.out.println("\t"+key+"    "+value);

                    }
                });
            }
        });



    }
}

运行后的结果为:
在这里插入图片描述


4.集合嵌套之HashMap嵌套ArrayList

集合嵌套之HashMap嵌套ArrayList

 用集合来存储下面的元素,并进行遍历如下的结果:
  三国演义
	 	 吕布
	 	 周瑜
  笑傲江湖
	 	令狐冲
	 	林平之
  神雕侠侣
	 	郭靖
	 	杨过  
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;

public class MyTest2 {
    public static void main(String[] args) {
        /*
	     三国演义
	 	     吕布
	 	     周瑜
	    笑傲江湖
	 	    令狐冲
	 	    林平之
	    神雕侠侣
	 	    郭靖
	 	    杨过
         */
        ArrayList<String> list1 = new ArrayList<>();
        list1.add("吕布");
        list1.add("周瑜");

        ArrayList<String> list2 = new ArrayList<>();
        list2.add("令狐冲");
        list2.add("林平之");

        ArrayList<String> list3 = new ArrayList<>();
        list3.add("郭靖");
        list3.add("杨过");

        HashMap<String, ArrayList<String>> map = new HashMap<>();
        map.put("三国演义",list1);
        map.put("笑傲江湖",list2);
        map.put("神雕侠侣",list3);

        Set<String> set = map.keySet();
        //遍历方式一:通过keySet方式进行遍历
        for (String key: set) {
            ArrayList<String> minlist = map.get(key);
            System.out.println(key);
            for (String s : minlist) {
                System.out.println("\t"+s);
            }
        }

        System.out.println("============");
      //遍历方式二:通过entryset方法及逆行遍历
        Set<Map.Entry<String, ArrayList<String>>> entries = map.entrySet();
        for (Map.Entry<String, ArrayList<String>> entry : entries) {
            String key = entry.getKey();
            System.out.println(key);
            ArrayList<String> value = entry.getValue();
            for (String s : value) {
                System.out.println("\t"+s);

            }
        }

        System.out.println("========");

        //遍历方式三:通过forEach方法进行遍历
        map.forEach(new BiConsumer<String, ArrayList<String>>() {
            @Override
            public void accept(String s, ArrayList<String> strings) {
                System.out.println(s);
                for (String string : strings) {
                    System.out.println("\t"+string);

                }
            }
        });


    }
}

运行后的结果为:
在这里插入图片描述


4.集合嵌套之ArrayList嵌套HashMap

集合嵌套之ArrayList嵌套HashMap

 用集合来存储下面的元素,并进行遍历如下的结果:
     周瑜---小乔
	 吕布---貂蝉

	 郭靖---黄蓉
	 杨过---小龙女

	 令狐冲---任盈盈
	 林平之---岳灵珊
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;

public class MyTest3 {
    public static void main(String[] args) {
        /*周瑜---小乔
        吕布---貂蝉

        郭靖---黄蓉
        杨过---小龙女

        令狐冲---任盈盈
        林平之---岳灵珊
         */

        HashMap<String, String> sgmap = new HashMap<>();
        sgmap.put("周瑜","小乔");
        sgmap.put("吕布","貂蝉");

        HashMap<String, String> xamap = new HashMap<>();
        xamap.put("郭靖","黄蓉");
        xamap.put("杨过","小龙女");

        HashMap<String, String> sdmap = new HashMap<>();
        sdmap.put("令狐冲","任盈盈");
        sdmap.put("林平之","岳灵珊");

        ArrayList<HashMap<String, String>> list = new ArrayList<>();
        list.add(sgmap);
        list.add(xamap);
        list.add(sdmap);

        for (HashMap<String, String> hashMap : list) {
            Set<String> keySet = hashMap.keySet();
            for (String key : keySet) {
                System.out.println(key+"---"+hashMap.get(key));
            }

        }


        System.out.println("=======================");
        for (HashMap<String, String> hashMap1 : list) {
            Set<Map.Entry<String, String>> entries = hashMap1.entrySet();
            for (Map.Entry<String, String> entry : entries) {
                System.out.println(entry.getKey()+"---"+entry.getValue());

            }
        }

        System.out.println("============================");
        for (HashMap<String, String> hashMap2 : list) {
            hashMap2.forEach(new BiConsumer<String, String>() {
                @Override
                public void accept(String key, String value) {
                    System.out.println(key+"---"+value);

                }
            });
        }
    }
    }

运行后的结果为:
在这里插入图片描述


总结

本节主要练习了TreeSet的自然排序与比较器排序,以及集合之间的嵌套使用和遍历。这些都是最基本的练习,是作为集合知识点中必须掌握的。

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值