201621123050 《Java程序設計》第9周學習總結

1. 本週學習總結

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

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

①foreach循環java

for (String e : map.keySet()) {
    System.out.println(e+"="+map.get(a));
       }

②迭代器編程

Set<String> set=map.keySet();
Iterator<String> it=set.iterator();
while(it.hasNext()){
    String a=it.next();
    System.out.println(a+"="+map.get(a));
 }

2. 書面做業

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

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

實驗總結:
這道題中,我學習到,Scanner不只能夠從控制檯System.in中讀取,也能夠從字符串String中讀取,使用這種方式,能夠自動以空格爲分隔符,對單詞進行劃分,對比split要方便得多,且輸出不容易出錯。具體語法是:學習

Scanner sc= new Scanner(line);
        while(sc.hasNext()){
            list.add(sc.next());
        }

此題還遇到一個粗心的小問題,就是使用equals和指定對象str進行對比時,給str加上了引號。修改後提交正確。測試

List中刪除元素的方法
方法一:須要注意的是,這個方法要從下標倒序開始刪除,避免刪除後下表修改致使跳過元素。設計

for (int i=list.size()-1;i>=0;i--) {
    if((list.get(i)).equals(str)){
    list.remove(i);
    }
}

方法二:使用迭代器刪除元素3d

for(Iterator<Integer> iterator = list.iterator();iterator.hasNext(); ){
    int e = iterator.next();
    if(e%2==0)
    iterator.remove();
        }

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

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

新建HsahMap對象爲map
while(1){
    if(輸入爲「!!!!」) 
        break;
    else
        if(map中已有元素)
            將(key元素,value+1)傳入map
        else 
            (key,value=1)傳入map
}
建立ArrayList對象list
實現Collections接口對map對象進行排序
輸出map的長度
輸出排序後list中前十個數據

2.2 實驗總結

此題的關鍵是運用的hashmap,其中key存放單詞,value存放單詞出現的次數。在將數據都輸入map後,如何排序成爲個人攔路石。在老師的指點下,知道了須要經過ArrayList來存放map數據,並接入Collections接口實現排序。、
感想:
此題若讓我獨立完成會很是困難,問題在於我沒法很快地將ArrayLIst的知識u也能用到此題中。這提醒我,要增強綜合編程能力,不能只是簡單地完成每一章節的學習,而要不時地將各章節內容結合起來進行變成。code

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

3.1 截圖你的代碼運行結果


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

新建Map對象map,key爲String,value爲ArrayList
建立ArrayList對象line

while(true){
       if (遇到("!!!!!")) {
          break;
    } 
       else {
             if(map中沒有相應的key)
                      把單詞添加到map中,同時將當前行數的值添加到value中
             else 
                      判斷是否已經存在於value中,若沒有,則添加當前行數到value中
       }
      建立迭代器,遍歷輸出,且以空格分隔
}

3.3 實驗總結

答:此題未能獨立完成,僅完成存放並輸出map。對於倒排索引,閱讀同窗的代碼稍微有一點頭緒。不能理解的地方是,value的類型爲ArrayList,同窗解釋說方便存儲單詞出現的行數。除了不能理解如何實現倒排索引,我還考慮過一行出現多個相同單詞的狀況,以及一些其餘的狀況,但最初的輸出行數都未能實現,這些思考也就一樣沒有實現。對象

4.Stream與Lambda

編寫一個Student類,屬性爲:blog

private Long id;
private String name;
private int age;
private Gender gender;//枚舉類型
private boolean joinsACM; //是否參加過ACM比賽

建立一集合對象,如List ,內有若干Student對象用於後面的測試。 排序

4.1 使用傳統方法編寫一個搜索方法List<Student> search(List<Student> 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而不是拋出異常。(截圖:出現學號)

List<Student> newStudent = s.stream().filter(e -> e!=null&&e.getId()>50L&&e.getName().equals("Gao")&&e.getAge()>18&&e.getGender()==Gender.male&&e.isJoinsACM()==true).collect(Collectors.toList());

5. 泛型類:GeneralStack

5.1 GeneralStack接口的代碼

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

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

答:使用ArrayListIntegerStack定義完成後,只能夠存放Integer類型。使用泛型,能夠根據定義不一樣,存放不一樣類型的棧,包括本身定義的引用類型,使得棧的應用範圍變廣闊不少,顯示了擴展性。

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 639 639 16 16
4 639 0 16 0
5 841 202 19 3
6 1075 234 23 4
7 1419 344 27 4
8 2028 609 33 6
9 2194 166 37 4
10 2625 431 41 4

本身的目標能實現嗎?
這是學期初頂下的目標

就目前來看,雖然被各類工做纏身,但學習還算跟上了。半個學期過去,目前代碼是2600行,距離目標6000行還有必定的距離。後續學生工做不那麼多,只須要專一學習和科研立項,那麼這一目標仍是能夠實現的。

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

維度 程度
語法 PTA的題目大部分可以自主完成,即便要花費一點時間,但語法基礎基本掌握
面向對象設計 可以自主設計對應的類,對對象的屬性和方法可以符合需求
應用能力 較欠缺,尤爲綜合應用能力,剩下半個學期着重鍛鍊這一能力
至今爲止代碼行數 2625

總結:java學習任重而道遠,繼續加油。

相關文章
相關標籤/搜索