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