標籤:2.4 split 介面 字串 應用 arch try 泛型類 沒有
1.本周學習總結1.1 以你喜歡的方式(思維導圖或其他)歸納總結集合與泛型相關內容
2.書面作業2.1List中指定元素的刪除(題集題目)2.1.1實驗總結。並回答:列舉至少2種在List中刪除元素的方法
2.2統計文字中的單詞數量並按出現次數排序(題集題目)2.2.1虛擬碼(不得複製代碼,否則扣分)
建立HashMap<String,Integer>讀入單詞遇到"!!!!!"跳出讀入迴圈foreach遍曆(遇到h中沒有的key,value=1;遇到h中有的key,在原有的value基礎上+1)Collections.sort實現value降序比較(value相同時,key升序排序)輸出h.size()foreach輸出前十的getkey()和getvalue()
2.2.2實驗總結
- 本題使用Map集合中的HashMap,首先是實現單詞的讀入;遇到單/多個空格時,使用Regex
String[] s = x.split(" \\s+");讀入過程方法與7-2略有不同,遇到Map中已有的索引值,在原有的value基礎上加1;反之,令其相應的value值為1,實現相應的迴圈遍曆;通過Map.Entry方法,重寫Collections.sort(),實現次數降序輸出,遇到次數相同的情況,按索引值升序輸出;最後輸出HashMap.size()和排序在前十的相應索引值和次數
HashMap--當需要索引值對錶示,又不關心順序可採用
TreeMap--當需要索引值對,並關心元素的自然排序時可採用
2.3倒排索引(題集題目)2.3.1你的代碼運行結果
2.3.2虛擬碼(不得複製代碼,否則扣分)
建立`Map<String, ArrayList<Integer>> h = new TreeMap<String, ArrayList<Integer>>();`建立`ArrayList`;實現迴圈輸入單詞:如果遇到"!!!!!"跳出迴圈;反之,如果在h中沒有找到相應的key,將其添加到h中並將所在的行數值添加到value(ArrayList)中,反之,判斷當前行數是否存在於已有的value(ArrayList);建立迭代器Iterator遍曆輸出;(完成第一部分)輸入字串數組(Regex空格隔開)如果h中沒有同時存在的要求單詞,`System.out.println("found 0 results");`,反之,求要求單詞所在行數的交集;如果不存在交集,`System.out.println("found 0 results");`,反之,輸出交集及對應行數(完成第二部分)
2.3.3實驗總結
- 在Map建立過程中就遇到瓶頸,如何確定value的資料類型,通過同學啟發使用
ArrayList<Integer>來實現;前期讀入單詞和集合類題目相似,第一部分使用迭代器Iterator實現遍曆輸出更直接;最困難的部分是實現交集部分所在行數及內容的輸出,通過for迴圈嵌套判斷語句按照虛擬碼的思路一步一步的實現,本題可以說是最為複雜的一道泛型與集合類的PTA題目
2.4Stream與Lambda
編寫一個Student類,屬性為:
private Long id; private String name; private int age; private Gender gender;//枚舉類型 private boolean joinsACM;//是否參加過ACM比賽
建立一集合對象,如List
2.4.1使用傳統方法編寫一個搜尋方法List<Student> search(Long id, String name, int age, Gender gender, boolean joinsACM),然後調用該方法將id>某個值,name為某個值, age>某個值, gender為某個值,參加過ACM比賽的學生篩選出來,放入新的集合。在main中調用,然後輸出結果。(:出現學號、姓名)
2.4.2使用java8中的stream(), filter(), collect()編寫功能同4.1的代碼,並測試(要出現測試資料)。構建測試集合的時候,除了正常的Student對象,再往集合中添加一些null,你編寫的方法應該能處理這些null而不是拋出異常。(:出現學號)
List<Student> newStudent = student.stream().filter(e -> e!=null&&e.getId()>2016L&&e.getName().equalsIgnoreCase("Lin")&&e.getAge()>18&&e.getGender()==Gender.Male&&e.isJoinsACM()==true).collect(Collectors.toList());
2.5泛型類:GeneralStack2.5.1GeneralStack介面的代碼
2.5.2結合本題與以前作業中的ArrayListIntegerStack相比,說明泛型有什麼好處
- 使用
interface GeneralStack<T>泛型定義介面,可以按照型別參數表列實現題目要求的Integer Double Car,極大程度上減少代碼冗餘,使得代碼更具靈活性,亦便於修改;與此同時,可以消除代碼中出現不必要的強制類型轉換現象(避免ClassCastException)
3.碼雲及PTA3.1碼雲代碼提交記錄
3.2PTA題集完成情況圖
3.3統計本周完成的代碼量
| 周次 |
|
總代碼量 |
|
新增代碼量 |
|
總檔案數 |
|
新增檔案數 |
|
| 第一周 |
|
189 |
|
189 |
|
10 |
|
10 |
|
| 第二周 |
|
304 |
|
304 |
|
9 |
|
9 |
|
| 第三周 |
|
557 |
|
557 |
|
10 |
|
10 |
|
| 第四周 |
|
621 |
|
621 |
|
8 |
|
8 |
|
| 第五周 |
|
326 |
|
326 |
|
7 |
|
7 |
|
| 第六周 |
|
972 |
|
972 |
|
12 |
|
12 |
|
| 第七周 |
|
338 |
|
338 |
|
4 |
|
4 |
|
| 第八周 |
|
379 |
|
379 |
|
6 |
|
6 |
|
| 第九周 |
|
492 |
|
492 |
|
5 |
|
5 |
|
4.評估自己對Java的理解程度
| 維度 |
|
程度 |
|
| 文法 |
|
掌握目前基本的Java文法,PTA的題目基本能完成,但綜合類的PTA題目還有一定的難度 |
|
| 物件導向設計能力 |
|
GUI介面設計還有待提高 |
|
| 應用能力 |
|
掌握的知識還不夠深入,可以藉助書籍逐步實現小工具的建立設計 |
|
| 至今為止程式碼數 |
|
將近4000行 |
|
201621123040《Java程式設計》第九周學習總結