Week09《java程序設計》第九次做業總結

Week09《java程序設計》第九次做業總結

1. 本週學習總結

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

答:
java

2. 書面做業

本次做業題集集合編程

1. List中指定元素的刪除(題集題目)

1.1 實驗總結。並回答:列舉至少2種在List中刪除元素的方法。

答:ide

  • 實驗總結:在public static List convertStringToList(String line) 函數中,要注意以單個或多個空格爲分割符,用Split()分隔出元素,並分隔多個空格[split(" +")]。在刪除元素函數中,特別注意是否刪除正確,循環條件是否知足刪除重複元素的要求。在這裏,從list的後面逐個比較調用equals方法,true就remove這個元素。
  • 刪除元素的方法:
    一、 從list的後面開始刪除
for (int i =list.size()-1 ; i >-1; i--) {
            if(list.get(i).equals(str)){
                list.remove(i);
                }
        }

二、利用迭代器,先越過一個元素,判斷該元素是否知足刪除條件,是就將其刪除,循環判斷是否還有下一個元素。應先調用next,再調用remove。函數

for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
            String  num = (String) iterator.next();
            if list.get(i).equals(str))
                iterator.remove();
        }

2. 統計文字中的單詞數量並按出現次數排序(題集題目)

2.1 僞代碼(不得複製代碼,不然扣分)

答:學習

創建 wordsMap集合
while(true){
讀取字符串到word
count=wordMap.get(word);得到該單詞出現的次數
if(word爲「!!!!!」)
    跳出當前讀取單詞的循環
else
     if(count不爲null)
          wordMap.put(word,++count);//不是第一次出現的單詞,次數在原來上加一
     else
          wordMap.put(word,1);//第一次出現的單詞,次數置爲1
 }

打印wordMap的長度,得到單詞總數。
List<Map.Entry<String,Integer>> list;//取wordsMap中的鍵值對放入list中。
Collections.sort(list) {//鍵值對比較排序
  compare(o1.o2)
    if(o1.value==o2.value)
        返回o1與o2的key比較結果
    else
         返回o1和o2的value比較結果
  }
i=0;
循環輸出前10個單詞和對應次數,用i>9作標記。
System.out.println(list);

2.2 實驗總結

答:
一、使用HashMap集合,Key放單詞(String),value放次數(Integer)
二、循環得到單詞和出現次數。單詞第一次出現value置爲1,不然就在原有的value值上加一。測試

Integer count = words.get(word);
if(count!=null){
count++;words.put(word, count);
}
else{
 words.put(word, 1);
}

三、取wordsMap鍵值對放入list.使用Map.Entry<K,V>
四、比較鍵值對的value,相同就比較key.Collections.sort方法使用內部類從新定義compare方法設計

Collections.sort(list,new Comparator<Map.Entry<String, Integer>>() {

        @Override
        public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
            if(o1.getValue()==o2.getValue())
                return o1.getKey().compareTo(o2.getKey());
            return o2.getValue()-o1.getValue();
        }
    });

3. 倒排索引(題集題目)

本題較難,作不出來沒關係。但必定要有本身的思考過程,要有提交結果。3d

3.1 截圖你的代碼運行結果

答:code

3.2 僞代碼(不得複製代碼,不然扣分)

答:對象

int count=0;//標記行數
while(true){
讀取一行到strline;
count++;
if(strline爲"!!!!!")
   跳出讀取單詞的循環
esle
    
    新建Scanner,從strline讀取
    Map linemap.put(Integer,String);//記錄每行的內容
    while(strScanner.hasnext()){
          讀取strSacnner.next()到word中
           if
           集合中已經存在該單詞,則將count直接加到單詞對應的行數表中
           Map wordMap.put(word,List<Integer>);//記錄單詞和單詞出現的行數集合
         else
             集合不存在該單詞
             新建List,將當前行數add進表中,再wordMap.put(word,list);
}
for(Map.Entry<String,List<Integer>> e:wordMap.entrySet())//循環打印索引
       println(e);
while
   get keyString;//得到查詢關鍵字
   for(Map.Entry<String,List<Integer>> e:linemap.entrySet())//在行集合的字符串中   判斷是否包含該關鍵字
        if (e.getvalue.comtains(keyString)==true)
           println(e.getkey+e.getvalue);
       else
          println("found 0 results");

3.3 實驗總結

答:這題作得時間較長,但收穫也不少。首先使用兩個Map集合,wordMap存放單詞和單詞出現的行數的集(List),linemap存放行數和每一行的內容。將所需元素循環存入兩個Map中。利用Map.Entry遍歷輸出wordMap,完成索引的打印。讀取關鍵字,在linemap中操做,循環判斷每一行的value中是否有包含關鍵字,是則輸出該行的Key和value.循環結束仍沒有改關鍵字,就輸出found o result.以上是個人總體思路。

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中調用,而後輸出結果。(截圖:出現學號、姓名)

答:搜索方法以下:

運行結果以下:

4.2 使用java8中的stream(), filter(), collect()編寫功能同4.1的代碼,並測試(要出現測試數據)。構建測試集合的時候,除了正常的Student對象,再往集合中添加一些null,你編寫的方法應該能處理這些null而不是拋出異常。(截圖:出現學號)
答:

  • 測試數據:
  • 功能代碼
  • 運行截圖

5. 泛型類:GeneralStack

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

5.1 GeneralStack接口的代碼

答:接口代碼:

public interface GeneralStack<E> {
    E push(E item);            //如item爲null,則不入棧直接返回null。
    E pop();                   //出棧,如爲棧爲空,則返回null。
    E peek();                //得到棧頂元素,如爲空,則返回null.
    public boolean empty();//如爲空返回true
    public int size();     //返回棧中元素數量
}

5.2 結合本題與之前做業中的ArrayListIntegerStack相比,說明泛型有什麼好處

答:在ArrayListIntegerStack中棧存放的元素類型必須明確指明,一旦指明,就沒法隨意更改。使用泛型,是使用字母E、T、K等做爲類型代號來聲明對象的類型。當接口使用泛型時,會極大遍歷接口的操做,減小不一樣類型的相同代碼,例如將GeneralStack
public class ArrayListGeneralStack implements GeneralStack 定義爲泛型,這樣就能夠支持傳入任何類型的數據。當操做該接口時,能夠指定E表明的類型,則接口中定義的方法也能夠直接套用E類型。

3.碼雲及PTA

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

3.1. 碼雲代碼提交記錄

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

3.2 截圖PTA題集完成狀況圖

須要有兩張圖(1. 排名圖。2.PTA提交列表圖)

3.3 統計本週完成的代碼量

須要將每週的代碼統計狀況融合到一張表中。

周次 總代碼量 新增代碼量 總文件數 新增文件數
1 0 0 0 0
2 0 0 0 0
3 0 0 0 0
4 0 0 0 0
5 739 739 16 16
6 1084 345 28 12
7 1180 96 30 2
8 1627 447 35 5
9 1986 359 44 9
10 2350 364 56 12

4. 評估本身對Java的理解程度

嘗試從如下幾個維度評估本身對Java的理解程度

維度 程度
語法 基本經常使用語法能夠熟練運用,PTA的題目部分能夠本身解決,部分要多多請教別人
面向對象設計能力 面向對象編程學習中,使用面向對象思想爲所要解決比較簡單的問題建模應該是能夠的
應用能力 感受基礎仍是沒打實,基本沒有什麼應用能力
至今爲止代碼行數 2350
相關文章
相關標籤/搜索