代码改变世界

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

2017-04-15 20:21  jmu201521123051  阅读(185)  评论(0编辑  收藏  举报

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)
实验总结已经在作业中体现,不用写