201621123086 《Java程序设计》第9周学习总结
1. 本周学习总结
1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容。
- 泛型的主要目的之一就是用来指定容器要持有什么类型的对象,而且由编译器来保证类型的正确性。
- 元组 (tuple) ,它是将一组对象直接打包存储于其中的一个单一对象。
- 泛型也可以应用于方法,与其所在的类是否是泛型没有关系。该方法能够独立于类而产生变化。
- 泛型还可以应用于内部类以及匿名内部类。
- Java泛型是使用擦除来实现的,这意味着在使用泛型时,任何具体的类型信息都被擦除了。我们可以用
extends
来声明具有某个具体类型,随后便可以安全的在泛型类的方法中调用某个类型参数特有的方法。 - 根据上面的特性可知,我们只在需要代码能够跨多个类型工作时才需要使用泛型。
- 擦除的弊端在于此类中的转型、
instancof
操作、new
表达式都是无效的。
2. 书面作业
1. List中指定元素的删除(题集题目)
1.1 实验总结。并回答:列举至少2种在List中删除元素的方法。
- 我们可以通过将文本放入
Scanner
并调用next()
方法来分离字符串 - 使用
List.remove()
方法来删除元素,while(list.contains(str))
来判断删除是否完全 - 使用
iterator.next()
来遍历,str.equals(str)
判断元素,用iterator.remove()
来删除元素
2. 统计文字中的单词数量并按出现次数排序(题集题目)
2.1 伪代码(不得复制代码,否则扣分)
while()
if(当字符串为!!!!!!)
停止循环
if(字符串在map中不存在)
将字符串存入并设置其value为1
if(存在)
将其value+1并存入
调用Collections.sort并编写内部类
value不相同
返回value差值
如果value相同
返回key值差值
foreach
输出
2.2 实验总结
- 此题排序的要点在于新建一个List并将map中的每个entry放入此List并进行排序,而非对原map进行操作。完成此题时,我在排完序后输出的是原map,导致了错误。在经过老师指正后理解了排序的实现方法。
3. 倒排索引(题集题目)
3.1 截图你的代码运行结果
3.2 伪代码(不得复制代码,否则扣分)
while(hasnextline)
if(=="!!!!!")
停止循环
将str转换为word[]
foreach:word
如果包含word
add行数
不包含
新建行数set
添加word与set
foreach
输出
while(hasnextline)
string转换为keyword[]
foreach:keyword
if(!contain)
flag = false;
retainAll保留公共元素
if(集合为空)
flag = false;
else
输出集合
foreach
输出对应行
3.3 实验总结
- 在创建map时,通过将value设为集合来表示行数。
- 在查询时,通过新建一个集合并运用
retainAll
方法获得这keyword对应集合的公共元素。 - 输出结果与输出样例相同,但PTA为答案错误。暂未排查出原因。
4.Stream与Lambda
编写一个Student类,属性为:
private Long id;
private String name;
private int age;
private Gender gender;//枚举类型
private boolean joinsACM; //是否参加过ACM比赛
创建一集合对象,如List
4.1 使用传统方法编写一个搜索方法
4.2 使用java8中的stream(), filter(), collect()编写功能同4.1的代码,并测试(要出现测试数据)。
5. 泛型类:GeneralStack
5.1 GeneralStack接口的代码
interface GeneralStack<T>{
public T push(T item);
public T pop();
public T peek();
public boolean empty();
public int size();
}
5.2 结合本题与以前作业中的ArrayListIntegerStack
相比,说明泛型有什么好处
泛型的好处在于能使代码跨类型使用,减少局限性,提升复用性。我们只需要对于类型进行声明,便可以灵活的对其进行操作。
3.码云及PTA
3.1. 码云代码提交记录
3.2 截图PTA题集完成情况图
3.3 统计本周完成的代码量
周次 | 总代码量 | 新增代码量 | 总文件数 | 新增文件数 |
---|---|---|---|---|
1 | 0 | 0 | 0 | 0 |
2 | 0 | 0 | 0 | 0 |
3 | 619 | 619 | 15 | 15 |
4 | 619 | 0 | 15 | 0 |
5 | 973 | 354 | 25 | 10 |
6 | 1394 | 421 | 37 | 12 |
7 | 2001 | 607 | 43 | 6 |
8 | 4046 | 2045 | 54 | 11 |
9 | 4486 | 440 | 64 | 10 |
10 | 4808 | 322 | 67 | 3 |
目标为3000行。
4. 评估自己对Java的理解程度
维度 | 程度 |
---|---|
语法 | PTA题目不难,但会因为一些细节问题卡住 |
面向对象设计能力 | 不算熟悉,了解较为浅显 |
应用能力 | 可以试一试简单的小程序 |
至今为止代码行数 | 4808 |