作业09-集合与泛型
1. 本周學習總結
1.1 以你喜歡的方式(思維導圖或其他)歸納總結集合與泛型相關內容。
1.2 選做:收集你認為有用的代碼片段
- 遍歷Map的方法:
- forEach循環遍歷的方法:
- Map 轉為List的方法:
- 過濾方法:
- 返回給定Collection的最大值方法:
2. 書面作業
本次作業題集集合
2.1 List中指定元素的刪除(題集題目)
2.1.1 實驗總結。并回答:列舉至少2種在List中刪除元素的方法。
實驗總結:
- 表示單個或者多個空格的方法有String [] arr = line.split(" +"); String []arr=line.split("\\s+"); \s是在split正則表達式中匹配任何空白字符。
- 該實驗還讓我學會了多種刪除List中元素的方法,詳見如下截圖。
以下是采用迭代器刪除列表元素和利用列表本身具有的remove方法刪除元素。
2.2 統計文字中的單詞數量并按出現次數排序(題集題目)
2.2.1 偽代碼(不得復制代碼,否則扣分)
- 用HashMap實現每個單詞與其數量的映射。
- 將HashMap轉為List
- 重寫Collections類中的sort方法實現對List的排序。
2.2.2 實驗總結
- HashMap中的一些基本方法,hashmap.contains(Key)判斷映射中是否已經包含此鍵 hashmap.get(K)得到鍵所對應的值 hashmap.size()此映射中包含幾條鍵值對
- 將HashMap轉為List List<Entry<String,Integer>> list = new ArrayList<Entry<String,Integer>>(amount.entrySet());
- 重寫Collections類中的sort方法
2.3 倒排索引(題集題目)
本題較難,做不出來不要緊。但一定要有自己的思考過程,要有提交結果。
2.3.1 截圖你的代碼運行結果
2.3.2 偽代碼(不得復制代碼,否則扣分)
- 使用HashMap實現單詞與位置的映射。顯然鍵為String型,值為ArrayList<Integer>。
- 將HashMap轉為List并且輸出。(之前的做法,學習了Map的遍歷方法后我們可以遍歷map來輸出鍵值對)
- 查找條目:如果輸入一個單詞則直接根據Key查找Value輸出;如果輸入多個單詞的話先找到單詞公共出現的位置,然后將公共位置輸出。
- 在實現第一步的時候就將每一行的內容添加到一個數組中,方便最后根據位置再輸出句子。
2.3.3 實驗總結
- 實驗還得考慮一種情況,那就是如果一個句子中重復出現一個單詞的情況。所以得判斷值數組中是否已經包含該行數。
- 將HashMap轉為List方法同上一題。遍歷map方法如下:
- 得到多個單詞的公共位置,可以以第一個單詞的值數組為基礎,然后如果其他值數組中不包含某一個就將其remove。最后如果基礎數組空了就輸出found 0 results
2.4 Stream與Lambda
編寫一個Student類,屬性為:
private Long id; private String name; private int age; private Gender gender;//枚舉類型 private boolean joinsACM; //是否參加過ACM比賽創建一集合對象,如List,內有若干Student對象用于后面的測試。
2.4.1 使用傳統方法編寫一個搜索方法List search(Long id, String name, int age, Gender gender, boolean joinsACM),然后調用該方法將id>某個值,name為某個值, age>某個值, gender為某個值,參加過ACM比賽的學生篩選出來,放入新的集合。在main中調用,然后輸出結果。(截圖:出現學號、姓名)
以下是使用傳統方法將ID>201621123065,姓名為Jintianting,age>3,參加過ACM的女性篩選出來并且輸出
2.4.2 使用java8中的stream(), filter(), collect()編寫功能同4.1的代碼,并測試(要出現測試數據)。構建測試集合的時候,除了正常的Student對象,再往集合中添加一些null,你編寫的方法應該能處理這些null而不是拋出異常。(截圖:出現學號)
該題先通過stream()變成流,用filter()過濾,留下符合要求的對象,collect()收集留下的元素,可以以List的方式展示。該題添加null之后會報錯說是空指針異常,因為Lambda表達式中調用方法的對象可能為空,那解決這個問題的方法可以是加限定條件,也可以是通過try-catch捕獲異常,但是捕獲異常優缺點。詳見下。
collect是一個終端操作,它接收的參數是將流中的元素累積到匯總結果的各種方式。可以是List,也可以使Set等等。
2.5 泛型類:GeneralStack
題集jmu-Java-05-集合之GeneralStack
2.5.1 GeneralStack接口的代碼
2.5.2 結合本題與以前作業中的ArrayListIntegerStack相比,說明泛型有什么好處
- 之前作業中ArrayListIntegerStack類中的棧只能存放Integer類型的元素,使用泛型之后棧不在限定為只能存放某種類型的元素。
- 泛型可以避免不安全的強制類型轉換,因為棧中的元素類型是自己指定的。
- 使用泛型之后編譯階段就會對類型進行檢查,不會在運行時才報錯。
2.6. 選做:泛型方法
基礎參考文件GenericMain,在此文件上進行修改。
2.6.1 編寫方法max,該方法可以返回List中所有元素的最大值。List中的元素必須實現Comparable接口。編寫的max方法需使得String max = max(strList)可以運行成功,其中strList為List<String>類型。也能使得Integer maxInt = max(intList);運行成功,其中intList為List<Integer>類型。注意:不得直接調用Collections.max函數。
String ,Integer類型已經實現自比較的Comparable接口
max(Collection<? extends T>) 方法用于返回給定collection的最大元素,根據其元素的自然順序。
聲明
以下是java.util.Collections.max()方法的聲明。
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
參數
coll-- 其最大元素的集合
返回值
方法調用返回給定collection的最大元素,根據其元素的自然順序。
異常
ClassCastException--這被拋出,如果集合中包含不可相互比較的(例如,字符串和整數)個元素。
NoSuchElementException--如果集合是空的,拋出此異常。
下面的例子顯示java.util.Collections.max()方法的使用
2.6.2 選做:現有User類,其子類為StuUser,且均實現了Comparable接口。編寫方法max1,基本功能同6.1,使得User user = max1(stuList);可以運行成功,其中stuList為List類型。也可使得Object user = max(stuList)運行成功。
不是很理解這道題要做啥,上題可以實現Integer 和String類型的最大值輸出已經使用到泛型,那這題沿用上題的max方法顯然也可以實現。其次因為父類實現了Comparable接口,其中的Comparable To方法實現的是將User按照年齡從小到大排序,那么調用max方法后將輸出年齡最大的StuUser。另外所有的類is a Object,Object user = max(stuList)也可以運行成功。如果User user = max1(stuList);這句是想輸出User,那將StuUser里面的toString方法注釋掉就好了。
2.6.3 選做:編寫int myCompare(T o1, T o2, Comparator c)方法,該方法可以比較兩個User對象,也可以比較兩個StuUser對象,傳入的比較器c既可以是Comparator<User>,也可以是Comparator<StuUser>。注意:該方法聲明未寫全,請自行補全。
方法代碼:
測試數據:
運行結果:
2.7 選做:逆向最大匹配分詞算法
集合實驗文件中的第07次實驗(集合).doc文件,里面的題目6.
2.7.1 寫出偽代碼(不得直接復制代碼)
- HashSet存儲詞表。
- 循環遍歷句子,過程如下:
- 如果遍歷完句子都沒有找到一個集中的詞,則說明該詞不存在,直接輸出該字符就好。
2.7.2 截圖你的代碼運行結果。
有部分沒實現,詞表中包含命和生命,逆向的話先得到命,這一點還沒想清楚。
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 | 0 | 0 | 0 | 0 |
| 6 | 939 | 939 | 17 | 17 |
| 7 | 1809 | 870 | 28 | 11 |
| 8 | 2713 | 904 | 33 | 5 |
| 9 | 3153 | 440 | 43 | 10 |
| 10 | 3665 | 512 | 50 | 7 |
3.4 評估自己對Java的理解程度
嘗試從以下幾個維度評估自己對Java的理解程度
| 語法 | PTA的題目可以自行完成,不會就百度,寫完只是時間問題 |
| 面向對象設計能力 | 需要時間思考如何根據問題設計合適的模型 |
| 應用能力 | 還未嘗試編寫小工具,如果只是圖形界面的話我覺得還行 |
| 至今為止代碼行數 | 3665 |
3.5 選做:使用Java解決實際問題
有n門課程,每個學生對每門課程都有幾個不懂的問題(每題都有標號)。教師期望對所有學生的問題進行歸類,首先對問題按課程分類,在某類中又將同一個學生的題目歸類在一起?,F有的操作流程,是每個學生把自己的各科目中不懂得題目按課程分類號后發給學習委員,學習委員進行統一匯總。現在希望編寫一個程序,幫助學習委員分類,并統計每門課程中哪些題目不懂率最高。嘗試寫出解決該問題的大概步驟?每個學生發給學習委員的文件內容應遵循一定規范方便程序處理,嘗試寫出該規范
- 先整合一張規范的文件。
- JAVA導入POI的jar包。進行一些基本的設置。
- 讀取文件,遇到“,”就移至下一個單元格,遇到回車就移至下一行。
獲取除首行外的每一列內容添加至一個List中,統計某個題目的數量,除以List的長度得到該題目的不懂率。
規范文本:
(其實在文本文件中使用tab鍵和回車鍵就好,之后將文本文件復制在excel中就會實現自動換行換列,統計不懂率應該在Excel中也是可以操作的)
轉載于:https://www.cnblogs.com/21-T/p/7827720.html
總結
以上是生活随笔為你收集整理的作业09-集合与泛型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ios tableview分组间距
- 下一篇: 牛客练习赛6