• 201521123064 《Java程序设计》第8周学习总结


    1. 本章学习总结

    • 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容。


    集合内容见:《Java程序设计》第7周学习总结

    • 1.2 选做:收集你认为有用的代码片段

    ① Java7以前我们使用泛型:List<String> strList = new ArrayList<String>();
    在java7中可以使用菱形语法:List<String> strList = new ArrayList<>();
    ② 在普通的类中也可以定义一个泛型方法

           class ArrayAlg{
                public static <T> T getMiddle(T[] arr){
                    return arr[arr.length/2];
                }
            }
    

    2. 书面作业

    本次作业题集集合

    • Q1:List中指定元素的删除(题目4-1)
    • 1.1 实验总结

    答:Scanner sc=new Scanner(line);读取一行的单词,再用sc.close();防止出现警告。
    特别注意remove过程中,在删除当前元素后,要让i自减。若不让i自减,则会出现跳过下一个有可能符合条件的元素。

    • 1.2 截图你的提交结果(出现学号)

    • Q2:统计文字中的单词数量并按出现次数排序(题目5-3)

    • 2.1 伪代码(简单写出大体步骤)

       Map<String, Integer> map = new HashMap<String, Integer>();
       while (sc.hasNext()) {
       	x = sc.next();
       	if (x.equals("!!!!!"))
       		break;
       	if (value == null){
       		map.put(key, 1);
       	} else {
       		map.put(key, ++value);
       	}
       }
       map.sort;
       Sysout the result;
      
    • 2.2 实验总结

    答:本题的重点还是在排序吧。一开始想用TreeMap,但是查了很多资料还是不大懂如何利用TreeMap进行倒序排序。于是改了思路,选用了老师的方法:

        Collections.sort()(list, new Comparator<Entry<String, Integer>>(){
            public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2){}
        }
    
    • 2.3 截图你的提交结果(出现学号)

    • Q3:ArrayListIntegerStack

    • 3.1 截图你的提交结果(出现学号)

    • 3.2 伪代码(简单写出大体步骤)

        while (sc.hasNextLine()) {                  //将text加入map中
    		String str = sc.nextLine();
    		if (str.equals("!!!!!")) break;
            else {
    			list.add(str);                      //加入list
    			Scanner wordsc = new Scanner(str);  //定义字母输入器
    			while (wordsc.hasNext()) {
    				if (map.get(key) == null) {
    					value.add(row);
    					map.put(key, value);
    				}
                    else map.get(key).add(row);
    			}
    		}
    	}
        Sysout the trsult;
        while (sc.hasNextLine()) {
    		String[] keys = str1.split(" ");        //以“ ”为分界
    		if(rows.contains(map.get(keys[0])))
    			rows.addAll(map.get(keys[0]));
    		for (String e : keys)
    			if(rows.contains(map.get(e)))
    				rows.retainAll(map.get(e));
    		if (rows.isEmpty()) 
    			Sysout:"found 0 results";
    		Sysout the trsult;
    	}
    
    • 3.3 实验总结

    答:这题真的做到好心累,思路应该是对的,运行结果同范例输出一样,但就是部分正确(哭泣)。
    我在本题定义映射时做了一个嵌套:TreeMap<String, TreeSet<Integer>> map = new TreeMap<String, TreeSet<Integer>>();,在调试过程中也要注意空指针的判断。 估计我是踩到空指针这个沟里了,接下来会再多花些时间调试,也会请教下学霸,应该能过。。

    • Q4:Stream与Lambda
      编写一个Student类,属性为:

       private Long id;
       private String name;
       private int age;
       private Gender gender;//枚举类型
       private boolean joinsACM; //是否参加过ACM比赛
      

    创建一集合对象,如List,内有若干Student对象用于后面的测试。

    • 4.1 使用传统方法编写一个方法,将id>10,name为zhang, age>20, gender为女,参加过ACM比赛的学生筛选出来,放入新的集合。在main中调用,然后输出结果。

       import java.util.ArrayList;
       import java.util.Scanner;
       
       enum Gender {
       	boy, girl
       }
       
       public class Student {
       	private long id;
       	private String name;
       	private int age;
       	private Gender gender;// 枚举类型
       	private boolean joinsACM; // 是否参加过ACM比赛
       
       	
       
       	public Student(long id, String name, int age, Gender gender, boolean joinsACM) {
       		this.id = id;
       		this.name = name;
       		this.age = age;
       		this.gender = gender;
       		this.joinsACM = joinsACM;
       	}
       
       	public String toString() {
       		return "Student [id=" + id + ", name=" + name + ", age=" + age + ", gender=" + gender + ", joinsACM=" + joinsACM
       				+ "]";
       	}
       
       	
       	public Student find() {
       		if (this.id > 10 && this.name.equals("zhang") && this.age > 20 && this.gender == Gender.girl
       				&& this.joinsACM) {
       			Student she = new Student(this.id, this.name, this.age, this.gender, this.joinsACM);
       			return she;
       		}
       
       		else
       			return null;
       
       	}
       	
       	public void main(String[] args) {
       		Scanner sc = new Scanner(System.in);
       		Student[] students = new Student[5];
       		students[0] = Student(8L, "zhang", 21, Gender.girl, true);
       		students[1] = Student(9L, "zhang", 21, Gender.girl, true);
       		students[2] = Student(10L, "wang", 21, Gender.girl, true);
       		students[3] = Student(11L, "zhang", 21, Gender.boy, true);
       		students[4] = Student(12L, "zhang", 21, Gender.girl, true);
       		for (Student e : students) {
                   System.out.println(e.find());
               }
       		sc.close();
       	}
       
       }
      

    • 4.2 使用java8中的stream(), filter(), collect()编写功能同4.1的函数,并测试。

    关键代码:

        ArrayList<Student> list1 = (ArrayList<Student>) arrayList.stream().filter(student -> (student.getId() > 10L && student.getName().equals("zhang")&& student.getAge() > 20 && student.getGender().equals(Gender.female)&& student.isJoinsACM())).collect(Collectors.toList());
    
    • 4.3 构建测试集合的时候,除了正常的Student对象,再往集合中添加一些null,然后重新改写4.2,使其不出现异常。

    关键代码:

            ArrayList<Student> list2 = (ArrayList<Student>) arrayList.stream().filter(student -> student != null && (student.getId() > 10L && student.getName().equals("zhang")&& student.getAge() > 20 && student.getGender().equals(Gender.female)&& student.isJoinsACM())).collect(Collectors.toList());
    
    • Q5:泛型类:GeneralStack(题目5-5)

    • 5.1 截图你的提交结果(出现学号)

    • 5.2 GeneralStack接口的代码

           interface GeneralStack<T>
           {
               public T push(T item);          
               public T pop();                 
               public T peek();                
               public boolean empty();
               public int size();     
           }
      
    • 5.3 结合本题,说明泛型有什么好处

    答:本题定义了GeneralStack的泛型接口,使我们在编译程序的时候不再局限于某一类型。同时也避免了强制转换带来的风险。
    参考:泛型的优点

    • Q6:泛型方法
      基础参考文件GenericMain,在此文件上进行修改。
    • 6.1 编写方法max,该方法可以返回List中所有元素的最大值。List中的元素必须实现Comparable接口。编写的max方法需使得String max = max(strList)可以运行成功,其中strList为List<String>类型。也能使得Integer maxInt = max(intList);运行成功,其中intList为List<Integer>类型。

    关键代码:

        public static <T extends Comparable<T>> T max(List<T> list)
        {                     
           T max = list.get(0);
           for (T e : list) {
             if ( e.compareTo( max ) > 0 ){
              max = e; 
           }
         }
           return max;
        }
        public class GenericMain {
        	public static void main(String[] args) {
        		List<String>strList=new ArrayList<String>();
                List<Integer>intList=new ArrayList<Integer>();
                strList.add("apple");
                strList.add("banana");
                strList.add("orange");
                strList.add("1");
                strList.add("2");
                strList.add("3");
                String maxStr = max(strList);
                Integer maxInt = max(intList);
                System.out.println("MaxString= " + maxStr);
                System.out.println("MaxInteger= " + maxInt);
        	}
        }
    
     > 运行结果:
    

    3. 码云上代码提交记录及PTA实验总结

    题目集:jmu-Java-05-集合

    3.1. 码云代码提交记录

    3.2. PTA实验

    函数(4-1),编程(5-3,5-4,5-5)
    实验总结已经在作业中体现,不用写。

  • 相关阅读:
    Agc011_C Squared Graph
    银河战舰
    项链
    无旋Treap
    [PHP] 生成二维码(两种方法)
    [XML] XML格式【有道翻译】API 的数据转化输出
    [YII2] COOKIE的操作使用
    [Laravel框架学习一]:Laravel框架的安装以及 Composer的安装
    [YII2] 修改默认控制器Controller以及默认方法Action
    [YII2] 3步发送邮件,有图有真相!
  • 原文地址:https://www.cnblogs.com/vicheng/p/6715591.html
Copyright © 2020-2023  润新知