201521123082 《Java程序設計》第8周學習總結

201521123082 《Java程序設計》第8周學習總結

標籤(空格分隔):Javahtml


1. 本週學習總結

1.1 以你喜歡的方式(思惟導圖或其餘)概括總結集合與泛型相關內容。

1.2 選作:收集你認爲有用的代碼片斷

關於泛型的基礎知識和有用的代碼片斷解釋能夠參考:瞭解泛型
泛型應用--泛型接口、泛型方法、泛型數組、泛型嵌套的代碼解釋能夠參考:Java泛型java


2. 書面做業

1.List中指定元素的刪除

題集jmu-Java-05-集合之4-1算法

1.1 實驗總結

Answer:
貼上函數代碼塊和解釋:編程

//註釋參考來自JDK6.0文檔(老師提供的中文版)

/* covnertStringToList函數代碼 */
    private static List<String> convertStringToList(String line) {
        Scanner input = new Scanner(line);
        //實例化list
        List<String> list = new ArrayList<String>();
        while (input.hasNext()) {
        //向列表的尾部添加指定的元素
            list.add(input.next());
        }
        return list;
    }

    /* remove函數代碼 */
    public static void remove(List<String> list, String str) {
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
        // next()返回迭代的下一個元素
            String word = iterator.next();
            if (word.equals(str)) {
        //iterator.remove()從迭代器指向的 collection 中移除迭代器返回的最後一個元素
                iterator.remove();
            }
        }
    }

1.2 截圖你的提交結果(出現學號)

Answer:
數組


2.統計文字中的單詞數量並按出現次數排序(儘可能不要出現代碼)

題集jmu-Java-05-集合之5-3 統計文字中的單詞數量並按出現次數排序函數

2.1 僞代碼(簡單寫出大致步驟)

Answer:學習

//關鍵代碼1
        //實例化儲存單詞的map,並實現存放
        Map<String, Integer> map = new TreeMap<String, Integer>();
        while (input.hasNext()) {
            String word = input.next();
            if (word.equals("!!!!!"))
                break;
            //containsKey(Object key)若是此映射包含指定鍵的映射關係,則返回 true。
            else if (!map.containsKey(word))
            //put(K key,V value)
                map.put(word, 1);
            else {
            //get(K key,V value)
                int n = (int) map.get(word);
                map.put(word, n + 1);
            }
        }
        System.out.println(map.size());
        
        //關鍵代碼2
        List<Map.Entry<String, Integer>> arrayList = new ArrayList<Map.Entry<String,             Integer>>(map.entrySet());
        //用Collections.sort()方法對arrayList存放Map的鍵值進行排序
        Collections.sort(/*
        .......
        .......*/
        );
        
        //關鍵代碼3
        for (Map.Entry<String, Integer> entry : arrayList) {
        /*
        按要求輸出
        ......
        ......
        */
        }

2.2 實驗總結

Answer:
在上面的代碼中已經在關鍵處作了解釋,學會善於運用map已經有的方法。
運行結果:

在查找JDK文檔時以爲下面有意義的說明:測試

瞭解接口 Map<K,V>:
K - 此映射所維護的鍵的類型
V - 映射值的類型
一個映射不能包含重複的鍵;每一個鍵最多隻能映射到一個值。
Map 接口提供三種collection 視圖,容許以鍵集、值集或鍵-值映射關係集的形式查看某個映射的內容。映射順序 定義爲迭代器在映射的 collection 視圖上返回其元素的順序。某些映射實現可明確保證其順序,如 TreeMap類;另外一些映射實現則不保證順序,如 HashMap 類。
基於紅黑樹(Red-Black tree)的 NavigableMap 實現。該映射根據其鍵的天然順序進行排序,或者根據建立映射時提供的 Comparator 進行排序,具體取決於使用的構造方法。
此實現爲 containsKey、get、put 和 remove 操做提供受保證的 log(n) 時間開銷。這些算法是 Cormen、Leiserson 和 Rivest 的 Introduction to Algorithms 中的算法的改編。
引用來自:JDK6.0中文版.net


3.倒排索引(儘可能不要出現代碼)

題集jmu-Java-05-集合之5-4設計

3.1 僞代碼(簡單寫出大致步驟)

Answer:

//若干行英文,以!!!!!爲結束,而且統計每一個單詞所在行數
while (input.hasNextLine()) {
            String str = input.nextLine();
            if (str.compareTo("!!!!!") == 0)
                break;
            word.add(str);
            String word1[] = str.split(" ");
            for (int i = 0; i < word1.length; i++) {
                Set<Integer> num = new TreeSet<Integer>();
                if (line.containsKey(word1[i])) {
                    num = line.get(word1[i]);
                }
                num.add(count);
                line.put(word1[i], num);
            }
            count++;
            m++;
        }
        //輸入一行查詢關鍵字,輸出行集與行集內每一行的內容
        while (input.hasNext()) {
        /*
        ......
        ......*/
        if (arr.size() == 0)
                System.out.println("found 0 results");
            else {
                System.out.println(arr.toString());
                int j;
                for (int i = 0; i < arr.size(); i++) {
                    j = arr.get(i) - 1;
                    System.out.println("line " + arr.get(i) + ":"+word.get(j));
        }

3.2 實驗總結

Answer:
鞏固了對TreeMap運用的熟練程度,學會了用split截取字符串來取得其中的關鍵字。


3.3 截圖你的提交結果(出現學號)

Answer:


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中調用,而後輸出結果。

Answer:


4.2 使用java8中的stream(), filter(), collect()編寫功能同4.1的函數,並測試。

Answer:

//關鍵代碼:
        List<Student> answer = list
                .stream().filter(line -> line.getId() > 10
                        && line.getName().equals("zhang") && line.getGender().equals(Gender.girl) && line.isJoinsACM())
                .collect(Collectors.toList());


4.3 構建測試集合的時候,除了正常的Student對象,再往集合中添加一些null,而後從新改寫4.2,使其不出現異常。

Answer:

//改進函數的關鍵代碼:
        List<Student> answer = list
                .stream().filter(line -> line != null).filter(line -> line.getId() > 10
                        && line.getName().equals("zhang") && line.getGender().equals(Gender.girl) && line.isJoinsACM())
                .collect(Collectors.toList());

結果截圖:


5.泛型類:GeneralStack

題集jmu-Java-05-集合之5-5 GeneralStack

5.1 GeneralStack接口的代碼

Answer:

interface GeneralStack
{
    public  Object push(Object item);          
    public  Object pop();              
    public  Object peek();                
    public boolean empty();
    public int size();     
}

5.2 結合本題,說明泛型有什麼好處

Answer:
在學泛型以前,我只知道類和方法只能使用具體的類型。當須要多種類型的方法和類時,必須重寫。以實驗5來講,之前IntegerStack接口只能用於存放Integer類型的數據,但運用泛型的知識,寫了通用的GeneralStack接口,對任何引用類型的數據都適用。


5.3 截圖你的提交結果(出現學號)

Answer:


6.泛型方法

基礎參考文件GenericMain,在此文件上進行修改。

6.1 6.1 編寫方法max,該方法能夠返回List中全部元素的最大值。List中的元素必須實現Comparable接口。編寫的max方法需使得Stringmax=max(strList)能夠運行成功,其中strList爲List<String>類型。也能使得Integer maxInt =max(intList);運行成功,其中intList爲List<Integer>類型。

Answer:
max方法以下:

public static <T extends Comparable<T>> T max(List<T> list) {
        T max = list.get(0);
        for (T word : list) {
            if (word.compareTo(max) > 0) {
                max = word;
            }
        }
        return max;
    }

運行結果以下:


6.2 :現有User類,其子類爲StuUser,且均實現了Comparable接口。編寫方法max1,基本功能同6.1,並使得max1(stuList);能夠運行成功,其中stuList爲List<StuUser>類型。

Answer:
方法max1和max方法的思想是相同的,只需稍做改變以下:

//實現Comparable接口    
public static <StuUserComparator extends Comparable<StuUser>> StuUser max1(List<StuUser> stuList)
       {                     
          StuUser maxstu = stuList.get(0);
          for (StuUser student : stuList) {
            if ( student.compareTo( maxstu ) > 0 ){
             maxstu = student; 
          }
        }
        return maxstu; 
       }

實現結果:


7.選作:逆向最大匹配分詞算法

集合實驗文件中的第07次實驗(集合).doc文件,裏面的題目6.

7.1 寫出僞代碼便可

Answer:

題目要求的說明以下:
實驗說明:
輸入格式:
第一行是詞表,每一個詞之間以空格分隔。
接下來是若干行中文句子。
輸出格式:
逆向最大匹配的分詞結果,每一個詞之間使用空格分隔。每一個輸入對應一行輸出。
輸入樣例:
詞表:你 我 他 愛 北京 天安門 研究 研究生 命 生命 的 起源
句子1:研究生命的起源
句子2:我愛北京天安門
句子3:好朋友
輸出樣例:
句子1分詞結果:研究 生命 的 起源
句子2分詞結果:我 愛 北京 天安門
句子3分詞結果:好 朋 友

個人想法:
將詞表的單詞存入哈希表;
而後輸入句子,將句子的詞與哈希表中的單詞比較;
若是相同,存入一個新的list;
最後輸出結合中的元素。


8.選作:JavaFX入門

完成其中的做業一、做業2。內有代碼,可在其上進行適當的改造。建議按照裏面的教程,從頭至尾本身搭建。
Answer:
只是熟悉一下JavaFX,完成做業,將界面中文化:


3. 碼雲上代碼提交記錄及PTA實驗總結

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

3.1. 碼雲代碼提交記錄

在碼雲的項目中,依次選擇「統計-Commits歷史-設置時間段」, 而後搜索並截圖


3.2. PTA實驗

函數(4-1),編程(5-3,5-4,5-5) 實驗總結已經在做業中體現,不用寫。

相關文章
相關標籤/搜索