1. 本周學習總結
以你喜歡的方式(思維導圖或其他)歸納總結集合相關內容。
2. 書面作業
1. ArrayList代碼分析
1.1 解釋ArrayList的contains源代碼
源代碼:
答:查找對象是否再數組中,并且返回在數組中的下標。如果不在數組中的話返回-1
1.2 解釋E remove(int index)源代碼
答:刪除index下標的元素,這個程序也進行了下標的檢查。檢查下標是否越界。
1.3 結合1.1與1.2,回答ArrayList存儲數據時需要考慮元素的具體類型嗎?
答:不需要考慮元素的類型。因為ArrayList的數組類型是Object類型,所以所有類型都可以。
1.4 分析add源代碼,回答當內部數組容量不夠時,怎么辦?
源代碼:
答:如果內部數組容量不夠,調用grow方法生成一個容量大小為原來1.5倍的數組,然后再把舊的數組里的內容拷貝的新的數組里。
1.5 分析private void rangeCheck(int index)源代碼,為什么該方法應該聲明為private而不聲明為public?
答:是程序內部自動檢查的方法,外部不需要對其進行操作,所以不需要聲明為public。
2. HashSet原理
2.1 將元素加入HashSet(散列集)中,其存儲位置如何確定?需要調用那些方法?
計算元素的哈希碼,即調用對象的hashCode方法。
根據哈希碼查找到對應的桶。
如果桶中已有其他的元素,則用調用equals方法與已有的元素進行比較。
如果比較結果為假,則將該元素插入桶中,如果比較結果為真,則用新的值替換舊的值。
方法:有hashCode方法和equals方法
2.2 將元素加入HashSet中的時間復雜度是多少?是O(n)嗎?(n為HashSet中已有元素個數)
答:是O(1),不是O(n)。
3. ArrayListIntegerStack
題集jmu-Java-05-集合之ArrayListIntegerStack
3.1 比較自己寫的ArrayListIntegerStack與自己在題集jmu-Java-04-面向對象2-進階-多態、接口與內部類中的題目自定義接口ArrayIntegerStack,有什么不同?(不要出現大段代碼)
答:由類名就可以看出,兩種方法的內部存儲方式不同,ArrayListIntegerStack使用動態數組來存儲數據。ArrayIntegerStack則是使用普通數組來存儲數據,使用ArrayListIntegerStack存儲數據時,出入棧可以直接用ArrayList中已有的方法進行操作,而ArrayInteger在出入棧時要定義一個棧頂指針top,通過指針的移動來實現棧方法。
3.2 結合該題簡單描述接口的好處,需以3.1為例詳細說明,不可泛泛而談。
答:接口的好處是相同方法,不同實現。就像ArrayListIntegerStack與ArrayIntegerStack,根據需求,通過不同的方式去實現同樣的目標
4. Stack and Queue
4.1 編寫函數判斷一個給定字符串是否是回文,一定要使用棧(請利用Java集合中已有的類),但不能使用java的Stack類(具體原因自己搜索)與數組。請粘貼你的代碼,類名為Main你的學號。
package week7;
import java.util.*;interface IntegerStack1{public void push(Character item);public void pop(); public Character peek(); public boolean empty(); public int size(); }class Stack implements IntegerStack1{List<Character> stack = new LinkedList<Character>();@Overridepublic void push(Character item) {stack.add(item);}@Overridepublic void pop() {stack.remove(stack.size()-1);}@Overridepublic Character peek() {return stack.get(stack.size()-1);}@Overridepublic boolean empty() {return stack.isEmpty();}@Overridepublic int size() {return stack.size();}}public class Main201421123042 {public static void main(String[] args) {Scanner sc = new Scanner(System.in );Stack stack = new Stack();boolean flag = true;String str = sc.next();char[] ch = str.toCharArray();for(char e:ch){stack.push(e);}for(int i=0;i<stack.size();i++){if(ch[i]!=stack.peek()){flag=false;break;}stack.pop();}System.out.println(flag);sc.close();}}
4.2 題集jmu-Java-05-集合之銀行業務隊列簡單模擬(只粘貼關鍵代碼)。請務必使用Queue接口,并說明你使用了Queue接口的哪一個實現類?
答:使用了Queue接口的LinkedList實現類。
5. 統計文字中的單詞數量并按單詞的字母順序排序后輸出
題集jmu-Java-05-集合之5-2 統計文字中的單詞數量并按單詞的字母順序排序后輸出 (作業中不要出現大段代碼)
5.1 實驗總結
set集合的對象是不重復的,使用TreeSet,會默認幫我們排好序。
3.碼云及PTA
題目集:jmu-Java-05-集合
3.1. 碼云代碼提交記錄
在碼云的項目中,依次選擇“統計-Commits歷史-設置時間段”, 然后搜索并截圖
3.2 截圖PTA題集完成情況圖
需要有兩張圖(1. 排名圖。2.PTA提交列表圖)
1,
2,
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 | 647 | 647 | 13 | 13 |
7 | 695 | 48 | 14 | 1 |
8 | 1867 | 1172 | 25 | 11 |
9 | 1974 | 107 | 29 | 4 |