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

1.2 选做:收集你认为有用的代码片段
迭代器的经典代码。。。

2. 书面作业
本次作业题集集合
1. List中指定元素的删除(题集题目)
1.1 实验总结。并回答:列举至少2种在List中删除元素的方法。
- 实验总结:在函数convertStringToList(String line) 中,要以空格(单个或多个)为分隔符,将line中的元素抽取出来,放入一个List,可以用String的方法split(“ +”);方法的参数为正则表达式,将元素抽取出来放进一个数组,再将数组利用for循环逐个加入list。在函数remove(List
list, String str),可以利用 if(list.get(i).equals(str)) list.remove(i);实现在list中移除掉与str内容相同的元素。 - 列举:a.利用Iterator遍历删除符合条件的元素。b.利用for循环遍历删除符合条件的元素。
参考网址:http://www.jb51.net/article/98763.htm
2. 统计文字中的单词数量并按出现次数排序(题集题目)
2.1 伪代码(不得复制代码,否则扣分)
Map<String,Integer>map = new HashMap<String,Integer>()
while(系统有输入){
String str;
if(str等于!!!!!)
退出;
else
map.put(str,1)
else
map.put(str,map.get(str)+1)
}
List<Entry<String,Integer>> list =new ArrayList<Entry<String,Integer>>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
比较 getValue
if equals
比较 Key
});
println(list)
2.2 实验总结
- 将单词存储到map里,先判断map是否有这个单词,如果有,就直接将map的value+1,否则将单词加入map,value置为1。
- 用到Collection.sort()排序方法。
3. 倒排索引(题集题目)
本题较难,做不出来不要紧。但一定要有自己的思考过程,要有提交结果。
3.1 截图你的代码运行结果

3.2 伪代码(不得复制代码,否则扣分)
if (行中有关键字)
在关键字集合中加入行号
for (每次搜索) {
if (表 == 0)
System.out.println("found 0 results");
else {
System.out.println(行);
3.3 实验总结
本题使用Map<String, ArrayList
4.Stream与Lambda
编写一个Student类,属性为:
private Long id;
private String name;
private int age;
private Gender gender;//枚举类型
private boolean joinsACM; //是否参加过ACM比赛
创建一集合对象,如List
4.1 使用传统方法编写一个搜索方法List search(List stuList, Long id, String name, int age, Gender gender, boolean joinsACM),然后调用该方法将id>某个值,name为某个值, age>某个值, gender为某个值,参加过ACM比赛的学生筛选出来,放入新的集合。在main中调用,然后输出结果。(截图:出现学号、姓名)
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Student[] students = new Student[5];
students[0] = new Student(9l, "zhang", 21, Gender.male, true);
students[1] = new Student(15l, "chen", 21, Gender.female, true);
students[2] = new Student(67l, "chen", 19, Gender.male, true);
students[3] = new Student(78l, "li", 20, Gender.female, true);
students[4] = new Student(69l, "zhong", 19, Gender.male, true);
List<Student> list2 = new ArrayList<Student>();
list2.add(students[0]);
list2.add(students[1]);
list2.add(students[2]);
list2.add(students[3]);
list2.add(students[4]);
List<Student> list3 = search(list2,5l,"zhang",20,Gender.male, true);
for (int i = 0; i < list3.size(); i++) {
System.out.println(list3.get(i).toString());
}
System.out.println("陈锦霞201621123061");
}
public static List<Student> search(List<Student> stuList, Long id, String name, int age, Gender gender, boolean joinsACM) {// 搜索方法(函数)
List<Student> list1 = new ArrayList<Student>();
for (Student student : stuList) {
if (student.getId() > id && student.getName().equals( name) && student.getAge() > age
&& student.getGender().equals(gender) && student.isJoinsACM() == true) {
list1.add(student);
}
}
return list1;
}
}//函数在Main中,而不在main中

4.2 使用java8中的stream(), filter(), collect()编写功能同4.1的代码,并测试(要出现测试数据)。构建测试集合的时候,除了正常的Student对象,再往集合中添加一些null,你编写的方法应该能处理这些null而不是抛出异常。(截图:出现学号)
ArrayList<Student> list3 =(ArrayList<Student>)list2.parallelStream().filter(student->student!=null&&(student.getId() > 5l && student.getName().equals( "zhang") && student.getAge() > 20
&& student.getGender().equals(Gender.male) && student.isJoinsACM() == true)).collect(Collectors.toList());
for (int i = 0; i < list3.size(); i++) {
System.out.println(list3.get(i).toString());
}
System.out.println("陈锦霞201621123061");
}

5. 泛型类:GeneralStack
题集jmu-Java-05-集合之GeneralStack
5.1 GeneralStack接口的代码
interface GeneralStack<E> {
E push(Object item);
E pop();
E peek();
public boolean empty();
public int size();
}
5.2 结合本题与以前作业中的ArrayListIntegerStack相比,说明泛型有什么好处
以前作业的ArrayListIntegerStack本来是Integer栈,之后要把栈改成String栈,很麻烦。当然,也可以事先把类型全部定义为Object,之后再进行强制类型转换。但是 强制类型转换容易在运行的时候出现类型所引起的错误,而且不容易找,所以尽量不用。在本题使用泛型,栈可以用来存储String,Integer,Car,这样可以更好地复用代码,而且在编译阶段就可以发现错误。
6. 选做:泛型方法
基础参考文件GenericMain,在此文件上进行修改。
6.1 编写方法max,该方法可以返回List中所有元素的最大值。List中的元素必须实现Comparable接口。编写的max方法需使得String max = max(strList)可以运行成功,其中strList为List类型。也能使得Integer maxInt = max(intList);运行成功,其中intList为List类型。注意:不得直接调用Collections.max函数。
public class Test {
public static void main(String[] args) {
List<String>strList=new ArrayList<String>();
List<Integer>intList=new ArrayList<Integer>();
strList.add("abcd");
strList.add("hello");
strList.add("world");
intList.add(1);
intList.add(2);
intList.add(3);
String maxStr = max(strList);
Integer maxInt = max(intList);
System.out.println("MaxString= " + maxStr);
System.out.println("MaxInteger= " + maxInt);
}
public static <T extends Comparable<T>> T max(List<T> list)
{
T max = list.get(0);
for (T e : list) {
if ( e.compareTo( max ) > 0 ){
max = e;
}
}
return max;
}
}

6.2 选做:现有User类,其子类为StuUser,且均实现了Comparable接口。编写方法max1,基本功能同6.1,使得User user = max1(stuList);可以运行成功,其中stuList为List类型。也可使得Object user = max(stuList)运行成功。
public class Main2 {
public static void main(String[] args) {
List<StuUser>stuList=new ArrayList<StuUser>();
stuList.add(new StuUser(1,"abcd"));
stuList.add(new StuUser(2,"hello"));
stuList.add(new StuUser(3,"world"));
User user = max1(stuList);
System.out.println("MaxStuUser= " + user);
Object user1 = max1(stuList);
System.out.println("MaxStuUser= " + user1);
}
public static <T extends Comparable<? super T>> T max1(List<? extends T> list)
{
int i=0;
for(;list.get(i)==null;)
i++;
T max1=list.get(0);
for(T e:list){
if(e.compareTo(max1)>0) max1=e;
if(e==null) continue;
}
return max1;
}
}

6.3 选做:编写int myCompare(T o1, T o2, Comparator c)方法,该方法可以比较两个User对象,也可以比较两个StuUser对象,传入的比较器c既可以是Comparator,也可以是Comparator。注意:该方法声明未写全,请自行补全。
public class Main3 {
public static void main(String[] args) {
List<StuUser>stuList=new ArrayList<StuUser>();
StuUser stuuser1=new StuUser(1,"abcd");
StuUser stuuser2=new StuUser(2,"hello");
StuUser stuuser3=new StuUser(3,"world");
User user1 = new User(4);
User user2= new User(5);
System.out.println(myCompare(stuuser1,stuuser2,new StuUserComparator()));
System.out.println(myCompare(stuuser2,stuuser3,new StuUserComparator()));
System.out.println(myCompare(stuuser1,user1,new UserReverseComparator()));
System.out.println(myCompare(user2,user1,new UserReverseComparator()));
}
public static <T> int myCompare (T o1, T o2, Comparator<T> c)
{
return c.compare(o1, o2);
}

3.码云及PTA
题目集:jmu-Java-05-集合
3.1. 码云代码提交记录

3.2 截图PTA题集完成情况图
需要有两张图(1. 排名图。2.PTA提交列表图)


3.3 统计本周完成的代码量

| 周次 | 行数 | 新增行数 | 文件数 | 新增文件数 |
|---|---|---|---|---|
| 1 | 91 | 91 | 5 | 5 |
| 2 | 504 | 413 | 18 | 13 |
| 3 | 1092 | 588 | 28 | 10 |
| 5 | 1158 | 129 | 34 | 6 |
| 6 | 1539 | 381 | 40 | 6 |
| 7 | 2023 | 484 | 49 | 9 |
| 8 | 2477 | 454 | 57 | 8 |
| 9 | 2709 | 232 | 63 | 6 |
| 10 | 3156 | 447 | 70 | 7 |
4. 评估自己对Java的理解程度
尝试从以下几个维度评估自己对Java的理解程度
| 维度 | 程度 |
|---|---|
| 语法 | pta上的题目还要问同学,只有小部分能自己做出来 |
| 面向对象设计能力 | 不怎么会 |
| 应用能力 | 不怎么会,只写过一个加法器 |
| 至今为止代码行数 | 3000+ |
浙公网安备 33010602011771号