• 201521123051《Java程序设计》第八周学习总结


    1. 本周学习总结

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

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

    集合与泛型综合示例

    import java.util.ArrayList;  
    import java.util.Iterator;  
      
    /* 
     * 创建一个集合,实体用ArrayList实现。 
     * 然后向集合添加5个字符串元素。 
     * 分别是:“hello”,“world”,“fujian”,“xiamen”,“ketang”。 
     * 判断集合中是否存在"ketang"这个元素? 
     */  
    public class ArrayListDemo {  
        public static void main(String[] args) {  
            // 创建ArrayList对象  
            ArrayList<String> list = new ArrayList<String>();  
            // 向ArrayList对象添加元素  
            list.add("hello");  
            list.add("world");  
            list.add("fujian");  
            list.add("ketang");  
            list.add("xiamen");  
      
            // 定义一个变量,用于存储需要查找的对象  
            String string = new String("ketang");  
            // 定义一个变量,用于接收返回值  
            boolean flag = findElement(list, string);  
            // 打印  
            System.out.println("list集合中包含"" + string + ""吗?" + flag);  
      
            printArrayList(list);  
        }  
      
        /** 
         * 这是一个遍历集合的方法。 
         *  
         * @param list 
         *            集合 
         */  
        private static void printArrayList(ArrayList<String> list) {  
            // //使用增强for循环,遍历集合  
            // for (Object object : list) {  
            // System.out.println((String)object);  
            // }  
      
            // 创建迭代器  
            Iterator<String> it = list.iterator();  
            System.out.println("集合中的元素有:");  
            // 使用迭代器,遍历集合  
            // hasNext(),如果指针后面还有元素,将返回true。若没有,返回false  
            while (it.hasNext()) {  
                String str = it.next();  
                System.out.print(str + "  ");  
            }  
      
        }  
      
        /** 
         * 这是一个查找集合中是否有指定对象 
         *  
         * @param list 
         *            指定集合 
         * @param string 
         *            指定对象 
         * @return 返回是否存在 
         */  
        private static boolean findElement(ArrayList<String> list, String string) {  
            boolean flag = list.contains(string);  
            return flag;  
        }  
      
    }  
    

    2. 书面作业

    本次作业题集集合

    1.List中指定元素的删除(题目4-1)

    1.1 实验总结

    在代码中,删除元素后,需要把下标减一。这是因为在每次删除元素后,ArrayList会将后面部分的元素依次往上挪一个位置(就是copy),所以,下一个需要访问的下标还是当前下标,所以必须得减一才能把所有元素都遍历完。
    

    2.统计文字中的单词数量并按出现次数排序(题目5-3)

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

         //读取
    Map<String,Integer> map = new HashMap<>();
    		Scanner in = new Scanner(System.in);
    		while (in.hasNext())
    		{
                         String word = in.next();
                         if(String word.equals("!!!!!")) break;
                          .......
    		}
    		//排序
    		List<Map.Entry<String, Integer>> arraylist = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
    		Collections.sort(arraylist,new Comparator<Map.Entry<String, Integer>>(){
    			public int compare(Map.Entry<String, Integer> obj1, Map.Entry<String, Integer> obj2)
    			{
    				return ((Integer) obj2.getValue()).compareTo((Integer) obj1.getValue());
    			}
    		});
    		// 输出次数前10的单词
    		List<Map.Entry<String, Integer>> list = arraylist.subList(0, 20);
    		
    		for (Map.Entry<String, Integer> item : list)
    			System.out.println(item.getKey() + "=" + item.getValue());
    		
    	}
    
    

    2.2 实验总结

    统计一篇文章中单词出现的次数,要存储单词和次数,根据次数排序输出,要用Map数据结构保存键值对。首先想到是用TreeMap<String, Integer>,它为有序映射表,但默认按照键Key排序,要让Map按照Value值排序,难以直接实现,所以用先存储再排序的方法。先用HashMap<String, Integer>存储单词和单词的次数,利用Map的entrySet()方法获取映射关系视图,再由此构建ArrayList<Map.Entry<String, Integer>>,最后用Collections.sort()方法,自定义一个比较Integer的comparator,对该ArrayList排序。
    
    

    3.倒排索引(题目5-4)

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

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

    3.3 实验总结

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

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

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

    5.泛型类:GeneralStack(题目5-5)

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

    5.2 GeneralStack接口的代码

    interface GeneralStack <T>
        {
            public  T push(T e);          
            public  T pop();              
            public  T peek();                
            public boolean empty();
            public int size();     
        }
    

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

    A、安全机制
    B、将运行时期的ClassCastException类型转换异常,转移到编译时期。
    C、泛型技术,是给编译器使用的技术。
    D、解决了强制转换的麻烦。
    F、优化程序设计
    

    6.泛型方法

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

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

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

    6.3 选做:编写int myCompare(T o1, T o2, Comparator c)方法,该方法可以比较User对象及其子对象,传入的比较器c既可以是Comparator,也可以是Comparator。注意:该方法声明未写全,请自行补全。

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

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

    7.1 写出伪代码

    7.2 实验总结

    8.选做:JavaFX入门

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

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

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

    3.1. 码云代码提交记录

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

    3.2. PTA实验

    函数(4-1),编程(5-3,5-4,5-5)
    实验总结已经在作业中体现,不用写

  • 相关阅读:
    Codechef之2014FebChallenge
    Codechef之CodeCraft: IIIT Hyderabad
    原创水题
    用图论模型解决dp问题
    [某模拟赛]一道好题
    萌新java入门笔记
    CodeForces 761C 【DP】
    POJ3268【最短路】
    POJ3191【(-2)进制本质】
    POJ3264 【RMQ基础题—ST-线段树】
  • 原文地址:https://www.cnblogs.com/xqy123/p/6710603.html
Copyright © 2020-2023  润新知