201621123061《Java程序设计》第九次学习总结

1. 本周学习总结

1.1 以你喜欢的方式(思惟导图或其余)概括总结集合与泛型相关内容。

1.2 选作:收集你认为有用的代码片断

迭代器的经典代码。。。
javascript

2. 书面做业

本次做业题集集合java

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 > map = new TreeMap<String, ArrayList >(); 来完成索引,根据出现的关键字来肯定行号,再用行号出现的次数来肯定输出,没有找到就输出found 0 results。 函数

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 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.net

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,在此文件上进行修改。3d

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+
相关文章
相关标签/搜索