201621123008 《Java 程序设计》 第九周学习总结
1. 本周学习总结
1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容。

2. 书面作业
本次作业题集集合
1. List中指定元素的删除(题集题目)
1.1 实验总结。并回答:列举至少2种在List中删除元素的方法。
总结:在做这道题的时候我是通过for循环正向遍历进而删除的,刚开始没注意到删除一个元素时i的变化导致答案错误,思考之后发现每删除一个元素i的值都要减一。
以该题为例列举了三种删除方法:
- 方法一
public static void remove1(List<String> list, String str) {
for (int i = 0; i < list.size(); i++)
if (list.get(i).equals(str)) {
list.remove(i);
i -= 1;
}
分析:该方法是通过正向遍历删除某一元素的,每删除一个元素i的值减一。
方法二
public static void remove2(List<String> list, String str) {
for(int i=list.size()-1;i>=0;i--) {
if (list.get(i).equals(str)) {
list.remove(i);
}
}
}
分析:该方法通过逆向遍历删除某一元素,此时i的值不受影响。
方法三
public static void remove3(List<String> list, String str) {
Iterator iterator=list.iterator();
while(iterator.hasNext()) {
if(iterator.next().equals(str)) {
iterator.remove();
}
}
}
分析:使用迭代器进行删除要方便很多,但是要注意remove()之前要有next()。
其他
也可以用stream(), filter(), collect()进行过滤,从而达到删除的目的。
补充: Iterator实现原理
2. 统计文字中的单词数量并按出现次数排序(题集题目)
2.1 伪代码(不得复制代码,否则扣分)
创建TreeMap对象
进入循环按行读入字符串,以!!!!!跳出循环。
对每行字符串使用split("\\s+")分割。
判断单词是否存在,不存在则加入,value置为1,存在则不加入,value+1;输出该对象的长度。
创建List对象:List<Entry<String,Integer>> list=newArrayList<Map.Entry<String, Integer>>(map.entrySet());
使用Collection.sort对List对象进行排序,按照value进行升序。
使用Entry<String,Integer>entry=list.get(i); entry.getKey() entry.getValue() 输出映射。
2.2 实验总结
总结:新学的知识点
Map.Entry: Map的内部接口,表示一个Map实体,即key-value键值对。内含有getKey(), getValue方法。
3. 倒排索引(题集题目)
3.1 截图你的代码运行结果

3.2 伪代码(不得复制代码,否则扣分)
创建两个TreeMap对象:wordMap,key为单词value为ArrayList对象存放单词所在行数;rowMap,key为具体的行数,value为该行的内容。
按一行一行的去读取字符串,将字符串进行分割,把分割出来的单词放入wordMap,如果单词不存在则加入wordMap,生成新的ArrayList对象将当前行数加入,如果单词存在则取出value,判断当前行数是否在value中,若不在则加入,遇到!!!!!时结束读取。
使用wordMap.forEach((key, value) -> System.out.println(key + "=" + value));输出单词即对应的行数。
接收查询关键字,对查询关键字进行分割,通过for循环遍历每个单词,找出所有单词共有的行数。
输出共有的行数。
3.3 实验总结
总结:因为是用List存放行数信息,可能会有重复的行数出现,过程中排除重复的行数就可以了。
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<Student> search(List<Student> stuList, Long id, String name, int age, Gender gender, boolean joinsACM),然后调用该方法将id>某个值,name为某个值, age>某个值, gender为某个值,参加过ACM比赛的学生筛选出来,放入新的集合。在main中调用,然后输出结果。(截图:出现学号、姓名)
具体代码
public static List<Student> search1(List<Student> studentList,Long id, String name, int age, Gender gender, boolean joinsACM) {
List<Student> ACMStudents = new ArrayList<>();
Student s = new Student(id, name, age, gender, joinsACM);
for (int i = 0; i < studentList.size(); i++) {
if (studentList.get(i) != null) {
if (joinsACM == true) {
if (studentList.get(i).equals(s)) {
ACMStudents.add(s);
}
}
}
}
return ACMStudents;
}
输入数据:
List<Student> studentList = new ArrayList<>();
studentList.add(new Student(001l, "张三", 18, Gender.MAN, true));
studentList.add(new Student(002l, "李四", 18, Gender.MAN, false));
studentList.add(null);
studentList.add(new Student(003l, "王二", 18, Gender.MAN, true));
studentList.add(null);
studentList.add(new Student(004l, "麻子", 18, Gender.MAN, false));
Student.search2(studentList,001l, "张三", 18, Gender.MAN, true)
输出数据:
周文华 201621123008
[Student [id=1, name=张三, age=18, gender=MAN, joinsACM=true]]
4.2 使用java8中的stream(), filter(), collect()编写功能同4.1的代码,并测试(要出现测试数据)。构建测试集合的时候,除了正常的Student对象,再往集合中添加一些null,你编写的方法应该能处理这些null而不是抛出异常。(截图:出现学号)
函数代码
public static List<Student> search2(List<Student> studentList,Long id, String name, int age, Gender gender, boolean joinsACM){
Student s = new Student(id, name, age, gender, joinsACM);
List<Student> ACMStudents = studentList.stream().filter(e->e!=null&&e.equals(s)).collect(Collectors.toList());
return ACMStudents;
}
输入数据同上
输出数据:
周文华 201621123008
[Student [id=1, name=张三, age=18, gender=MAN, joinsACM=true]]
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相比,说明泛型有什么好处
分析:之前都是建立一个Integer类型的数组,只能存放Integer类型的数据,这就有了局限性,如果想存入String类型的就不可以,使用泛型之后就使的代码更具有适用性了;我们在使用ArrayList时其内部采用Object数组存储,如果不指定类型,后面就要自己再进行强制类型转换,指定类型之后就消除了强制类型转换,也提高了类型安全。
6. 选做:泛型方法
基础参考文件GenericMain,在此文件上进行修改。
6.1 编写方法max,该方法可以返回List中所有元素的最大值。List中的元素必须实现Comparable接口。编写的max方法需使得String max = max(strList)可以运行成功,其中strList为List类型。也能使得Integer maxInt = max(intList);运行成功,其中intList为List类型。注意:不得直接调用Collections.max函数。
函数代码
public static <T extends Comparable<T>> T max(List<T> list) {
T max = list.get(0);
for (int i = 0; i < list.size(); i++) {
if (max.compareTo(list.get(i)) < 0)
max = list.get(i);
}
return max;
}
测试代码
List<Integer> intList = new ArrayList<>();
intList.add(1);
intList.add(2);
intList.add(3);
intList.add(4);
System.out.println(max(intList));
List<StuUser> stuList=new ArrayList<>();
stuList.add(new StuUser(10, "10"));
stuList.add(new StuUser(10, "11"));
stuList.add(new StuUser(13, "20"));
stuList.add(new StuUser(13, "11"));
System.out.println(max1(stuList));
输出结果
4
4
6.2 选做:现有User类,其子类为StuUser,且均实现了Comparable接口。编写方法max1,基本功能同6.1,使得User user = max1(stuList);可以运行成功,其中stuList为List类型。也可使得Object user = max(stuList)运行成功。
函数代码
public static <T extends StuUser> T max1(List<T> list) {
T max=list.get(0);
for (int i = 0; i < list.size(); i++) {
if (max.compareTo(list.get(i)) < 0)
max = list.get(i);
}
return max;
}
测试代码
List<StuUser> stuList=new ArrayList<>();
stuList.add(new StuUser(10, "10"));
stuList.add(new StuUser(10, "11"));
stuList.add(new StuUser(13, "20"));
stuList.add(new StuUser(13, "11"));
System.out.println(max1(stuList));
List<Object> objList=new ArrayList<>();
objList.add(stuList);
System.out.println(max1(stuList));
输出结果
StuUser [no=20, toString()=User [age=13]]
StuUser [no=20, toString()=User [age=13]]
6.3 选做:编写int myCompare(T o1, T o2, Comparator c)方法,该方法可以比较两个User对象,也可以比较两个StuUser对象,传入的比较器c既可以是Comparator,也可以是Comparator。注意:该方法声明未写全,请自行补全。
函数代码
public static <T extends User> int myCompare(T o1,T o2,Comparator<T> c) {
return c.compare(o1, o2);
}
测试代码
User user1=new User(5);
User user2=new User(20);
System.out.println(myCompare(user1, user2, new UserReverseComparator()));
StuUser stu1=new StuUser(10, "10");
StuUser stu2=new StuUser(10, "12");
System.out.println(myCompare(stu1, stu2, new StuUserComparator()));
输出结果
15
-2
7. 选做:逆向最大匹配分词算法
集合实验文件中的第07次实验(集合).doc文件,里面的题目6.
7.1 写出伪代码(不得直接复制代码)
伪代码
将词表放入HashSet。
创建一个ArrayList对象用于存储该句子中词。
设置一个front指针,初始化为0;
进入循环:while (sentence.length() != 0)
设置最大词长度:maxLength = sentence.length();
令String temp = sentence.substring(front, maxLength);
如果temp在词表中存在则加入2所创建的ArrayList对象,将temp删除:sentence = sentence.replace(temp, "");,将front置为0;如果在词表中不存在则front+1,进行front>=maxLength判断,为true跳出循环。
逆向输出ArrayList对象中的内容。
源代码
public static void main(String[] args) {
Set<String> wordsSet = new HashSet<>();
Scanner sc = new Scanner(System.in);
String[] words = sc.nextLine().split("\\s+");
for (String str : words) {
wordsSet.add(str);
}
while (true) {
List<String> newList = new ArrayList<>();
String sentence = sc.nextLine();
int front = 0;
while (sentence.length() != 0) {
int maxLength = sentence.length();
String temp = sentence.substring(front, maxLength);
if (wordsSet.contains(temp)) {
newList.add(temp);
sentence = sentence.replace(temp, "");
front = 0;
} else {
front += 1;
if(front>=maxLength)
break;
}
}
if (newList.size() > 0) {
System.out.print(newList.get(newList.size() - 1));
if (newList.size() > 2)
for (int i = newList.size() - 2; i >= 0; i--)
System.out.print(" " + newList.get(i));
}
System.out.println();
}
}
7.2 截图你的代码运行结果。

3.码云及PTA
题目集:jmu-Java-05-集合
3.1. 码云代码提交记录
- 在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

3.2 截图PTA题集完成情况图



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

| 周次 | 总代码量 | 新增文件代码量 | 总文件数 | 新增文件数 |
|---|---|---|---|---|
| 1 | 665 | 20 | 20 | 20 |
| 2 | 1705 | 23 | 23 | 23 |
| 3 | 1834 | 30 | 30 | 30 |
| 4 | 1073 | 1073 | 17 | 17 |
| 5 | 1073 | 1073 | 17 | 17 |
| 6 | 2207 | 1134 | 44 | 27 |
| 7 | 3292 | 1085 | 59 | 15 |
| 8 | 3505 | 213 | 62 | 3 |
| 9 | 8043 | 1246 | 153 | 16 |
| 10 | 8606 | 543 | 167 | 14 |
4. 评估自己对Java的理解程度
- 尝试从以下几个维度评估自己对Java的理解程度
| 维度 | 程度 |
|---|---|
| 语法 | 还有很多的语法需要去学习,还需要多加练习。 |
| 面向对象设计能力 | 这方面做的也不是很好,可能只会一些基本的吧,要学习的地方太多太多太多 |
| 应用能力 | 感觉自己只是学到了一点皮毛,更深的知识和技术都还没学到,不知道自己能不能做的出来 |
| 至今为止代码行数 | 8606 |
201621123008 《Java 程序设计》 第九周学习总结的更多相关文章
- 201521123027 <java程序设计>第九周学习总结
1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2.书面作业 Q1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什 ...
- 20145220java程序设计第九周学习总结
20145220java程序设计第九周学习总结 教材学习内容总结 JBDC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商对接口直接操作,开发人员无须接触底层数据可驱动程序的差异 ...
- 201771010134杨其菊《面向对象程序设计java》第九周学习总结
第九周学习总结 第一部分:理论知识 异常.断言和调试.日志 1.捕获 ...
- 201521044152<java程序设计>第一周学习总结
本周学习总结 java开发时间虽然很短,但是发展迅速,已成为现在非常流行的一门语言,很开心能有幸学习java.第一周学习了java的平台,运行环境jdk以及jrt等等新名词,还了解了eclipse的基 ...
- 20145304 刘钦令 Java程序设计第二周学习总结
20145304 <Java程序设计>第2周学习总结 教材学习内容总结 java可区分基本类型和类类型(即参考类型)两大类型系统. 基本类型主要可区分为整数.字节.浮点数.字符与布尔. 整 ...
- 20145304 刘钦令 Java程序设计第一周学习总结
20145304<Java程序设计>第1周学习总结 教材学习内容总结 1995年5月23日,是公认的Java的诞生日,Java正式由Oak改名为Java. Java的三大平台是:Java ...
- 201621123007 Java程序设计第一周 学习总结
第一周-Java基本概念 201621123007 <Java程序设计> 第一周学习总结 1. 本周学习总结 java是面向对象的一类语言,三大特征:封装性,继承性,多态性. jdk jr ...
- 马凯军201771010116《面向对象与程序设计Java》第九周学习总结
一.理论知识部分 异常.日志.断言和调试 1.异常:在程序的执行过程中所发生的异常事件,它中断指令的正常执行. 2.Java的异常处理机制可以控制程序从错误产生的位置转移到能够进行错误处理的位置. 3 ...
- 201521123063 JAVA程序设计 第二周学习总结
1.本周学习重点(2.27-3.5) java中的数组 以二维数组为例,数组名为scores,则 (1)先声明数组 int[][] scores;或int scores[][];或int[] scor ...
- 《Java》第九周学习总结
下载mysql 选择mysql的管理软件 idea可以直接连接 然后用库运行程序,但是没有截图,,因为想在navicat上试试,可惜速度太慢了 打开idea又很慢,所以明天再更新
随机推荐
- mui-图文列表 图片大小问题
下面是源码,不能调节图片大小 <ul class="mui-table-view"> <li class="mui-table-view-cell mu ...
- maven打包报错:Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.5:test
mvn package的时候报如下错误: Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.5:test ...
- lua keynote
[lua keynote] 1.两个减号是单行注释: -- --[[ 多行注释 多行注释 --]] ---[[ // 三个'-'开启的是一个行注释--]] 1.1.两条语句可以在同一行,并表不需要分号 ...
- Photoshop Keynote
[Photoshop Keynote] 1.Tab:隐藏.显示所有面板. 2.Sihft+Tab:隐藏.显示右侧面板. 3.F:全屏切换. 4.选择并遮住: 参考:http://www.51shipi ...
- 手工命令行 搭建 hadoop 和 spark 环境
环境准备:3台CentOS7,64位,Hadoop2.7需要64位Linux 192.168.20.161 192.168.20.162 192.168.20.163 三台机器分别叫host01. ...
- Solr的搭建
Solr6.6.0下载地址 http://www.apache.org/dyn/closer.lua/lucene/solr/ 安装JRE 需要Java Runtime Environment(JRE ...
- php判断文件夹是不是存在
function MkFolder($path){ if(!is_readable($path)){ MkFolder( dirname($path) ); if(!is_file ...
- 4. Median of Two Sorted Arrays (二分法;递归的结束条件)
There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two ...
- Python+Selenium学习--定位iframe中的对象
场景 在web 应用中经常会出现frame 嵌套的应用,假设页面上有A.B 两个frame,其中B 在A 内,那么定位B 中的内容则需要先到A,然后再到B. switch_to_frame ...
- 字符串 String 格式化 format
String str=String.format("Hi,%s", "王力"); 保留两位数的整数: String str=String.format(&quo ...