1.本周学习总结
1.1以你喜欢的方式(思维导图或其他)归纳总结集合相关内容。
2.书面作业
本次作业题集 集合
2.1. List中指定元素的删除(题集题目)
2.1.1 实验总结。并回答:列举至少2种在List中删除元素的方法。
- 在
convertStringToList(String line)
方法中,通过split(" +")方法来按照一个或者多个空格进行字符串的数组划分,在新建一个list,将数据通过add导入,最后return list
- 在
remove
方法中,要调用到ArrayList中的remove
方法,先通过for循环遍历输入的list,再用if语句判断list中是否存在输入的字符串str
,如果存在则list.remove()
之后要加一个i--
否则会出现隔一个遍历一个的情况。
2.2. 统计文字中的单词数量并按出现次数排序(题集题目)
2.2.1伪代码(不得复制代码,否则扣分)
Map<String,Integer> map = new HashMap<String,Integer>()
while(系统有下一个输入)
String line = sc.nextLine()
if(line等于!!!!!)
break
lineScanner = new Scanner(line)
while(lineScanner存在下一输入)
读入键str
if(map存在键str)
map.put(str,map.get(str)+1)
else
map.put键对应的值为1
List<Entry<String,Integer>> list =new ArrayList<Entry<String,Integer>>
Collentions.sort(list,new Comparator<Map.Entry<String,Integer>>){
if(getValue相同)
用compareTo比较Key1和Key2
else
返回getValue2-getValue1
}
2.2.2 实验总结
- 将输入的单词处理后存入到map中,先通过
map.containsKey(str)
判断map中是否有这个单词,如果有就直接将对应单词的值Value+1,如果没有就添加这个词,再将其Vlaue置1 - 用到
Scanner lineScanner = new Scanner(line)
和while(lineScanner.hasNext())
,String str = lineScanner.next()
来调用输入的值 - 覆写Collect.sort()的排序方法
2.3. 倒排索引(题集题目)
本题较难,做不出来不要紧。但一定要有自己的思考过程,要有提交结果。
2.3.1 截图你的代码运行结果
2.3.2 伪代码(不得复制代码,否则扣分)
while(判断输入条件是否满足!!!!!)
split拆分字符串
for(循环String数组)
if判断map中是否存在当前单词
{map.put(words[i],arrlist)}
else
{
map.get(words[i])
if判断取出的arraylist是否存在重复数据(行数)同一行的数据{不存在->map.put}
}
查找元素部分:
while循环下
if判断map中是否存在单词
{
if(列表a是否为空)
map.get(data[j])
else输入的单词不止一个
{
b=map.get(data[j])
for 循环a列表的元素个数的次数
{if b中不存在a中元素,则删除a中的该元素}
if{a.isEmpty()}
输出未找到结果
}
}
2.3.3 实验总结
- 通过新建TreeMap来满足输出时的格式要求,因此
String
为键型,ArrayList<Integer>
为值型 - 新建一个
int indext
来表示行数,通过while循环判断输入的字符串是否为!!!!!
split
方法将字符串分为String数组,调用for循环比较,如果map中没有当前单词,就新建一个arraylist将当前行数add到其中,再map.put
将值的集合添加到键中。反之,如果存在,就要map.get
获取当前单词所对应的值的集合,再判断当前集合中是否存在index
,以此来判断同一行是否出现过相同的单词,如果没有,就执行添加行数和map.put
操作- 通过
List<Entry<String,ArrayList<Integer>>> list=new ArrayList<Entry<String,ArrayList<Integer>>>(map.entrySet())
转换类型,再通过for循环输出。 - while循环下,新建两个ArrayList,a和b。对输入的字符串进行数组拆分后,调用for循环,再通过if判断map中是否存在该单词,存在的话判断a是否为空,如果为空就获取当前单词对应的列表list,反之意味着就是这一行有第二个单词了,把第二个单词存在的list给b,通过for循环运行a的行数的次数,用if判断ab中相同的行数,如果b中不存在a的第t个元素的话,就是在a中删除当前t对应的行数。如果a被删成空表,就输出
found 0 results
2.4.Stream与Lambda
编写一个Student类,属性为:
private Long id; private String name; private int age; private Gender gender;//枚举类型 private boolean joinsACM; //是否参加过ACM比赛
创建一集合对象,如List
2.4.1 使用传统方法编写一个搜索方法List<Student> search(List<Student> stuList, Long id, String name, int age, Gender gender, boolean joinsACM)
,然后调用该方法将id>某个值,name为某个值, age>某个值, gender为某个值,参加过ACM比赛的学生筛选出来,放入新的集合。在main中调用,然后输出结果。(截图:出现学号、姓名)
- 输出的是学号大于输入id201621123080L,性别为男,名字为suwl,年龄大于15,参加过ACM的人。
2.4.2使用java8中的stream(), filter(), collect()编写功能同4.1的代码,并测试(要出现测试数据)。构建测试集合的时候,除了正常的Student对象,再往集合中添加一些null,你编写的方法应该能处理这些null而不是抛出异常。(截图:出现学号)
2.5. 泛型类:GeneralStack
题集jmu-Java-05-集合
之GeneralStack
2.5.1GeneralStack接口的代码
2.5.2 结合本题与以前作业中的ArrayListIntegerStack
相比,说明泛型有什么好处
- 提高代码的复用性,减少重复代码的工作量
- 减少局限性,我们只需要通过对类型进行声明就可以改变不同代码在对于不同元素的操作。
3.码云及PTA
题目集:jmu-Java-05-集合
3.1 码云代码提交记录
- 在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
3.2 截图PTA题集完成情况图
需要有两张图(1. 排名图。2.PTA提交列表图
3.3 统计本周完成的代码量
需要将每周的代码统计情况融合到一张表中。
周次 | 总代码量 | 新增代码量 | 总文件数 | 新增文件数 |
---|---|---|---|---|
1 | 120 | 120 | 2 | 2 |
2 | 280 | 160 | 5 | 3 |
3 | 590 | 310 | 10 | 5 |
4 | 780 | 190 | 12 | 2 |
5 | 1290 | 510 | 17 | 5 |
6 | 1710 | 420 | 20 | 3 |
7 | 2513 | 803 | 24 | 4 |
8 | 2513 | 0 | 24 | 0 |
9 | 3014 | 501 | 27 | 3 |
10 | 3441 | 327 | 30 | 3 |
3.4评估自己对Java的理解程度
尝试从以下几个维度评估自己对Java的理解程度
维度 | 程度 |
---|---|
语法 | PTA的题目暂时还不能全部轻松搞定,需要通过搜索引擎,以及与同学的交流探讨完成 |
面向对象设计能力 | 能够完成一些比较简单的面向对象设计 |
应用能力 | 可以编写一些简单的小工具 |
至今为止代码行数 | 3400 |