201621123018《Java程序设计》第9周学习报告 1. 本周学习总结 2. 书面作业 3.码云及PTA 4. 评估自己对Java的理解程度

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

泛型个人认为可以理解为一种模糊的类型,在里面写入各种方法,程序员可以根据需要再创建具体类型的对象,然后调用泛型里面的方法。这样有助于简化代码。

2. 书面作业

本次作业题集集合

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

1.1 实验总结。并回答:列举至少2种在List中删除元素的方法。

本题相对来说比较容易,只要按照题目的要求完成即可。

    //1、正向遍历删除
    public static void remove(List<String> list, String str){
            for (int i = 0;i <list.size();i++){
                if (str.equals(list.get(i))){
                    list.remove(i);
                    i--;
                }
            }
    }    

    //2、反向遍历删除
    public static void remove(List<String> list, String str){
            for (int i = list.size()-1;i >= 0;i--){
                if (str.equals(list.get(i))){
                    list.remove(i);
                }
            }
    }  

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

2.1 伪代码(不得复制代码,否则扣分)

    while(true){
        /*
        *将单词`(key)`和出现次数`(value)`一一对应
        */
    }
    Collections.sort(){
        /*
        * 比较  
        */   
    }
    for(){
        /*
        *输出
        */
    }

2.2 实验总结

本题主要要注意新的单词的value要置为1,已有单词要在原本value值上+1。最后要实现用Collections接口来实现排序。
关键部分:

    List<Map.Entry<String, Integer>> infoIds =new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
	Collections.sort(infoIds, new Comparator<Map.Entry<String, Integer>>() {   
	    public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
	    	if(o2.getValue() - o1.getValue()==0)
	    		return (o1.getKey()).toString().compareTo(o2.getKey());
	        return (o2.getValue() - o1.getValue()); 
	    }
	}); 

3. 倒排索引(题集题目)

本题较难,做不出来不要紧。但一定要有自己的思考过程,要有提交结果。

3.1 截图你的代码运行结果

201621123018《Java程序设计》第9周学习报告
1. 本周学习总结
2. 书面作业
3.码云及PTA
4. 评估自己对Java的理解程度

3.2 伪代码(不得复制代码,否则扣分)

    创建map存储单词和所在行数
    创建List对象listString,存储每一行的句子
    创建List对象result存储索引结果
    while(in.hasNext()){
        实现单词和所在行数的一一对应
    }
    
    for{
        将map输出
    }
    while(in.hasNext()){
        索引,将结果存入result,然后输出
    }

3.3 实验总结

本题难度较大,做了很久。首先应该创建Map<String,ArrayList<Integer>> map = new TreeMap<>();,用来存储单词和所在行数。此时应该注意存储行数的list的更新。索引时,将所要查找的字符串的单词分隔开,调用contains方法,如果一行中包含所要所要索引的单词,则将行数加入result中,最后将结果输出。

4.Stream与Lambda

    编写一个Student类,属性为:
    private Long id;
    private String name;
    private int age;
    private Gender gender;//枚举类型
    private boolean joinsACM;//是否参加过ACM比赛

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

4.1 使用传统方法编写一个搜索方法List search(List stuList, Long id, String name, int age, Gender gender, boolean joinsACM),然后调用该方法将id>某个值,name为某个值, age>某个值, gender为某个值,参加过ACM比赛的学生筛选出来,放入新的集合。在main中调用,然后输出结果。(截图:出现学号、姓名)

201621123018《Java程序设计》第9周学习报告
1. 本周学习总结
2. 书面作业
3.码云及PTA
4. 评估自己对Java的理解程度
201621123018《Java程序设计》第9周学习报告
1. 本周学习总结
2. 书面作业
3.码云及PTA
4. 评估自己对Java的理解程度

4.2 使用java8中的stream(), filter(), collect()编写功能同4.1的代码,并测试(要出现测试数据)。构建测试集合的时候,除了正常的Student对象,再往集合中添加一些null,你编写的方法应该能处理这些null而不是抛出异常。(截图:出现学号)

201621123018《Java程序设计》第9周学习报告
1. 本周学习总结
2. 书面作业
3.码云及PTA
4. 评估自己对Java的理解程度
201621123018《Java程序设计》第9周学习报告
1. 本周学习总结
2. 书面作业
3.码云及PTA
4. 评估自己对Java的理解程度
201621123018《Java程序设计》第9周学习报告
1. 本周学习总结
2. 书面作业
3.码云及PTA
4. 评估自己对Java的理解程度

5. 泛型类:GeneralStack

题集jmu-Java-05-集合之GeneralStack

5.1 GeneralStack接口的代码

interface GeneralStack<E> {
    public E push(E item);
	public E pop();   
    public E peek();  
    public boolean empty();
    public int size();      
}

5.2 结合本题与以前作业中的ArrayListIntegerStack相比,说明泛型有什么好处

ArrayListIntegerStack中只有一种数据类型,而本题可以实现多种数据类型的操作,通过泛型,我们只要定义泛型接口并实现它,就能实现对多种类型的操作。

3.码云及PTA

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

3.1. 码云代码提交记录

在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
201621123018《Java程序设计》第9周学习报告
1. 本周学习总结
2. 书面作业
3.码云及PTA
4. 评估自己对Java的理解程度

3.2 截图PTA题集完成情况图

需要有两张图(1. 排名图。2.PTA提交列表图)
201621123018《Java程序设计》第9周学习报告
1. 本周学习总结
2. 书面作业
3.码云及PTA
4. 评估自己对Java的理解程度
201621123018《Java程序设计》第9周学习报告
1. 本周学习总结
2. 书面作业
3.码云及PTA
4. 评估自己对Java的理解程度

3.3 统计本周完成的代码量

需要将每周的代码统计情况融合到一张表中。
自己的目标能实现吗?

周次 总代码量 新增代码量 总文件数 新增文件数
1 160 160 49 49
2 387 227 55 6
3 630 243 59 4
4 968 238 65 5
5 1171 203 69 4
6 1626 445 77 8
7 2061 435 80 3
8 2385 324 86 6
9 2727 342 90 4

4. 评估自己对Java的理解程度

维度 程度
语法 PTA的题目难度不大的大部分能搞定
面向对象设计能力 还不是很熟悉
应用能力 一般般
至今为止代码行数 2727