zoukankan      html  css  js  c++  java
  • 201521123044 《Java程序设计》第8周学习总结

    1. 本章学习总结


    2. 书面作业

    本题作业题集集合

    1.List中指定元素的删除(题目4-1)

    • 1.1 实验总结(见注释)
    public static List<String> convertStringToList(String line) {
    		List<String> strList = new ArrayList<String>();
    		Scanner sc = new Scanner(line);
    		while(sc.hasNext()) {
    			strList.add(sc.next());
    		}
    		sc.close();
    		return strList;
    	}//实现以空格为分割符,将line转换为List<String>.
    public static void remove(List<String> list, String str) {
    		for(int i=list.size()-1;i>=0;i--) {//删除元素的时候从最后一个元素开始,避免删除元素后位置发生变化而导致有些元素没有删除。
    			if(list.get(i).equals(str)) {//用equals的方法比较是否为相同元素 
    				list.remove(i);//引用iterator的remove的方法在list中移除掉以与str内容相同的元素
    			}
    		}
    	}
    

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

    • 2.1 伪代码(简单写出大体步骤)
      (1)Map<String,Integer> map = new HashMap<String,Integer>();//创建键对象和值对象的映射
      (2)if(map.containsKey(str))//containsKey判断是否包含指定的键名,若是出现过的单词则次数加1,否则及次数为1。
      (3)for (Map.Entry<String, Integer> e : sortmap1.entrySet()) //entrySet():迭代后可以通过e.getKey(),e.getVaclue()获得key和value
      (4)Collections.sort(entryList, new MapComparatorByValue())//Collections中的sort涉及到许多泛型,必须要实现Comparable接口,用compare To的方法来比较大小;对entryList的元素进行排序。
      (5)输出次数排序前10的元素。
    • 2.2 实验总结
      单词的次数统计和出现的单词数量,用Map类来实现,而Map是键对象和值对象的映射集合,键对象不能重复,值对象可以重复;我觉得比较重要的地方就是map.containsKey(str)判断Map中是否存在这个键,有的话次数加1,没有就添加这个键到Map中。

    3.倒排索引(题目5-4)

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

    • 3.2 伪代码(简单写出大体步骤)
      (1)创建lineword来存放句子
      (2)String[] lineword=str.split(" ");split方法存放文本的单词
      (3)if(word.containsKey(lineword[i]))同第2题,用containsKey的方法,判断在Map中是否存在已有的单词和句子的行数,若不存在,则存放新单词和其句子的行数
      (4)for (Map.Entry<String, Integer> e : sortmap1.entrySet())// entrySet():迭代后可以通过e.getKey(),e.getVaclue()获得key和value
      (5)用for循环,查找句子中单词出现的行数的次数。
      (6)如果出现的行数的次数=单词数,输出,否则输出found 0 results

    • 3.3 实验总结
      还是涉及到Map的使用,通过使用TreeMap进行排序;而用匿名内部类来实现Comparato接口进行排序,然后就是查找句子,用出现查找的单词来确定行数,根据该行数出现的次数来确定输出,行数的次数=单词数,输出,否则输出found 0 results

    4.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中调用,然后输出结果。

    样例:

    Student a=new Student(11L,"zhang",21,Gender.female,true);
    Student b=new Student(9L,"zheng",21,Gender.female,true);
    Student c=new Student(20L,"ling",15,Gender.male,false);
    Student d=new Student(20L,"zhang",25,Gender.female,true);
    

    实现的方法:

    public Student find(){
            if(this.id>10L&&this.name.equals("zhang")&&this.age>20&&this.gender==Gender.female&&this.joinsACM){
            Student e=new Student(this.id,this.name,this.age,this.gender,this.joinsACM);
            return e;
    } else return null;
    }
    

    运行结果:

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

    代码:

    ArrayList<Student> List2=(ArrayList<Student>) List.parallelStream().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>) List.parallelStream().filter(student->(student.getId()> 10L && student.getName().equals("zhang")
                        && student!=null
                        && student.getAge() > 20
                        && student.getGender().equals(Gender.female)
                        && student.isJoinsACM())).collect(Collectors.toList());
    }
    

    运行结果:

    5.泛型类:GeneralStack(题目5-5)

    • 5.1 截图你的提交结果(出现学号)
    • 5.2 GeneralStack接口的代码
    interface GeneralStack<T> {
        T push(T item);            
    	T pop();                 
        T peek();                
        public boolean empty();
        public int size(); 
    }
    
    • 5.3 结合本题,说明泛型有什么好处
      题目5-5中的stack需要实现Interger、Double和Car三种类型,如果不用泛型,那我们就只能每一种都去实现,c差别与数据类型不同但方法完全相同的GeneralStack接口。因此使用了泛型可以提高代码复用率。

    6.泛型方法

    基础参考文件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 t : list) {
    	        if ( t.compareTo( max ) > 0 ){
    	         max = t; 
    	      }
    	    }
    	      return max; // 返回最大对象
    	   }
    

    样例:

    strList.add("good");
    strList.add("value");
    strList.add("hello");
    

    方法:String max = max(strList);
    运行结果:

    • 6.2 选做:现有User类,其子类为StuUser,且均实现了Comparable接口。编写方法max1,基本功能同6.1,并使得max1(stuList);可以运行成功,其中stuList为List<StuUser>类型。
    public static <StuUserComparator extends Comparable<StuUser>> StuUser max1(List<StuUser> stuList) {                     
    	       StuUser max = stuList.get(0);
    	      for (StuUser t : stuList) {
    	        if ( t.compareTo( max ) > 0 ){
    	         max = t; 
    	      }
    	    }
    	      return max; 
    }
    

    样例:

    StuUser a=new StuUser(44,"25");
        stuList.add(e1);
    StuUser b=new StuUser(24,"23");
        stuList.add(e2);
    StuUser c=new StuUser(8,"6");
        stuList.add(e3);
    

    运行结果:

  • 相关阅读:
    将Nginx添加到windows服务中
    springboot使用redis管理session
    GIT常用命令
    阻止360、谷歌浏览器表单自动填充
    谈谈对Spring IOC的理解
    同一个Nginx服务器同一端口配置多个代理服务
    LeetCode 653. Two Sum IV
    109. Convert Sorted List to Binary Search Tree(根据有序链表构造平衡的二叉查找树)
    108. Convert Sorted Array to Binary Search Tree(从有序数组中构造平衡的BST)
    LeetCode 236. Lowest Common Ancestor of a Binary Tree(二叉树求两点LCA)
  • 原文地址:https://www.cnblogs.com/Min21/p/6714991.html
Copyright © 2011-2022 走看看