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

时间:2022-12-15 06:41:53

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

标签(空格分隔):Java


1. 本周学习总结

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

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

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

关于泛型的基础知识和有用的代码片段解释可以参考:了解泛型

泛型应用--泛型接口、泛型方法、泛型数组、泛型嵌套的代码解释可以参考:Java泛型


2. 书面作业

1.List中指定元素的删除

题集jmu-Java-05-集合之4-1

1.1 实验总结

Answer:

贴上函数代码块和解释:

//注释参考来自JDK6.0文档(老师提供的中文版)

/* covnertStringToList函数代码 */
private static List<String> convertStringToList(String line) {
Scanner input = new Scanner(line);
//实例化list
List<String> list = new ArrayList<String>();
while (input.hasNext()) {
//向列表的尾部添加指定的元素
list.add(input.next());
}
return list;
} /* remove函数代码 */
public static void remove(List<String> list, String str) {
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
// next()返回迭代的下一个元素
String word = iterator.next();
if (word.equals(str)) {
//iterator.remove()从迭代器指向的 collection 中移除迭代器返回的最后一个元素
iterator.remove();
}
}
}

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

Answer:

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


2.统计文字中的单词数量并按出现次数排序(尽量不要出现代码)

题集jmu-Java-05-集合之5-3 统计文字中的单词数量并按出现次数排序

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

Answer:

        //关键代码1
//实例化储存单词的map,并实现存放
Map<String, Integer> map = new TreeMap<String, Integer>();
while (input.hasNext()) {
String word = input.next();
if (word.equals("!!!!!"))
break;
//containsKey(Object key)如果此映射包含指定键的映射关系,则返回 true。
else if (!map.containsKey(word))
//put(K key,V value)
map.put(word, 1);
else {
//get(K key,V value)
int n = (int) map.get(word);
map.put(word, n + 1);
}
}
System.out.println(map.size()); //关键代码2
List<Map.Entry<String, Integer>> arrayList = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
//用Collections.sort()方法对arrayList存放Map的键值进行排序
Collections.sort(/*
.......
.......*/
); //关键代码3
for (Map.Entry<String, Integer> entry : arrayList) {
/*
按要求输出
......
......
*/
}

2.2 实验总结

Answer:

在上面的代码中已经在关键处做了解释,学会善于运用map已经有的方法。

运行结果:

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

在查找JDK文档时觉得下面有意义的说明:

了解接口 Map<K,V>:

K - 此映射所维护的键的类型

V - 映射值的类型

一个映射不能包含重复的键;每个键最多只能映射到一个值。

Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。映射顺序 定义为迭代器在映射的 collection 视图上返回其元素的顺序。某些映射实现可明确保证其顺序,如 TreeMap类;另一些映射实现则不保证顺序,如 HashMap 类。

基于红黑树(Red-Black tree)的 NavigableMap 实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。

此实现为 containsKey、get、put 和 remove 操作提供受保证的 log(n) 时间开销。这些算法是 Cormen、Leiserson 和 Rivest 的 Introduction to Algorithms 中的算法的改编。

引用来自:JDK6.0中文版


3.倒排索引(尽量不要出现代码)

题集jmu-Java-05-集合之5-4

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

Answer:

//若干行英文,以!!!!!为结束,并且统计每个单词所在行数
while (input.hasNextLine()) {
String str = input.nextLine();
if (str.compareTo("!!!!!") == 0)
break;
word.add(str);
String word1[] = str.split(" ");
for (int i = 0; i < word1.length; i++) {
Set<Integer> num = new TreeSet<Integer>();
if (line.containsKey(word1[i])) {
num = line.get(word1[i]);
}
num.add(count);
line.put(word1[i], num);
}
count++;
m++;
}
//输入一行查询关键字,输出行集与行集内每一行的内容
while (input.hasNext()) {
/*
......
......*/
if (arr.size() == 0)
System.out.println("found 0 results");
else {
System.out.println(arr.toString());
int j;
for (int i = 0; i < arr.size(); i++) {
j = arr.get(i) - 1;
System.out.println("line " + arr.get(i) + ":"+word.get(j));
}

3.2 实验总结

Answer:

巩固了对TreeMap运用的熟练程度,学会了用split截取字符串来取得其中的关键字。


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

Answer:

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


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

Answer:

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


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

Answer:

//关键代码:
List<Student> answer = list
.stream().filter(line -> line.getId() > 10
&& line.getName().equals("zhang") && line.getGender().equals(Gender.girl) && line.isJoinsACM())
.collect(Collectors.toList());

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


4.3 构建测试集合的时候,除了正常的Student对象,再往集合中添加一些null,然后重新改写4.2,使其不出现异常。

Answer:

//改进函数的关键代码:
List<Student> answer = list
.stream().filter(line -> line != null).filter(line -> line.getId() > 10
&& line.getName().equals("zhang") && line.getGender().equals(Gender.girl) && line.isJoinsACM())
.collect(Collectors.toList());

结果截图:

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


5.泛型类:GeneralStack

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

5.1 GeneralStack接口的代码

Answer:

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

5.2 结合本题,说明泛型有什么好处

Answer:

在学泛型之前,我只知道类和方法只能使用具体的类型。当需要多种类型的方法和类时,必须重写。以实验5来说,以前IntegerStack接口只能用于存放Integer类型的数据,但运用泛型的知识,写了通用的GeneralStack接口,对任何引用类型的数据都适用。


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

Answer:

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


6.泛型方法

基础参考文件GenericMain,在此文件上进行修改。

6.1 6.1 编写方法max,该方法可以返回List中所有元素的最大值。List中的元素必须实现Comparable接口。编写的max方法需使得Stringmax=max(strList)可以运行成功,其中strList为List<String>类型。也能使得Integer maxInt =max(intList);运行成功,其中intList为List<Integer>类型。

Answer:

max方法如下:

public static <T extends Comparable<T>> T max(List<T> list) {
T max = list.get(0);
for (T word : list) {
if (word.compareTo(max) > 0) {
max = word;
}
}
return max;
}

运行结果如下:

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


6.2 :现有User类,其子类为StuUser,且均实现了Comparable接口。编写方法max1,基本功能同6.1,并使得max1(stuList);可以运行成功,其中stuList为List<StuUser>类型。

Answer:

方法max1和max方法的思想是相同的,只需稍作改变如下:

//实现Comparable接口
public static <StuUserComparator extends Comparable<StuUser>> StuUser max1(List<StuUser> stuList)
{
StuUser maxstu = stuList.get(0);
for (StuUser student : stuList) {
if ( student.compareTo( maxstu ) > 0 ){
maxstu = student;
}
}
return maxstu;
}

实现结果:

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


7.选做:逆向最大匹配分词算法

集合实验文件中的第07次实验(集合).doc文件,里面的题目6.

7.1 写出伪代码即可

Answer:

题目要求的说明如下:

实验说明:

输入格式:

第一行是词表,每个词之间以空格分隔。

接下来是若干行中文句子。

输出格式:

逆向最大匹配的分词结果,每个词之间使用空格分隔。每个输入对应一行输出。

输入样例:

词表:你 我 他 爱 北京 * 研究 研究生 命 生命 的 起源

句子1:研究生命的起源

句子2:我爱北京*

句子3:好朋友

输出样例:

句子1分词结果:研究 生命 的 起源

句子2分词结果:我 爱 北京 *

句子3分词结果:好 朋 友

我的想法:

将词表的单词存入哈希表;

然后输入句子,将句子的词与哈希表中的单词比较;

如果相同,存入一个新的list;

最后输出结合中的元素。


8.选做:JavaFX入门

完成其中的作业1、作业2。内有代码,可在其上进行适当的改造。建议按照里面的教程,从头到尾自己搭建。

Answer:

只是熟悉一下JavaFX,完成作业,将界面中文化:

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


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

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

3.1. 码云代码提交记录

在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

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


3.2. PTA实验

函数(4-1),编程(5-3,5-4,5-5)

实验总结已经在作业中体现,不用写。