201621123021《JAVA程序設計》第八周學習總結
阿新 • • 發佈:2017-11-11
進行 contain ash num fbo spa mod 當我 容量
1. 本周學習總結
2. 書面作業
1. ArrayList代碼分析
1.1 解釋ArrayList的contains源代碼
public boolean contains(Object o) { return indexOf(o) >= 0; }
- 根據源碼可知contains函數是一種判斷數組是否存在某一內容函數,其運用了函數ondexOf,通過判斷可知,存在此內容返回true,否則返回false。
1.2 解釋E remove(int index)源代碼
public E remove(int index) { rangeCheck(index); modCount++; E oldValue = elementData(index); int numMoved = size - index - 1; if (numMoved > 0) System.arraycopy(elementData, index+1, elementData, index, numMoved); elementData[--size] = null; // clear to let GC do its work returnoldValue; }
- 根據源碼remove函數是通過計算計算數組中該元素的位置,然後使用System.arraycopy()函數的得到調節後的數組,接著把原素組中要刪除的元素重置為null。
1.3 結合1.1與1.2,回答ArrayList存儲數據時需要考慮元素的具體類型嗎?
- ArrayList存儲數據時可以不用考慮基本數據類型,因為ArrayList可以存儲的類型是object,而其實所有類的父類,所以如果我們不斷ArrayList進行約束,可以不考慮存儲數據的類型。
1.4 分析add源代碼,回答當內部數組容量不夠時,怎麽辦?
public boolean add(E e) { ensureCapacityInternal(size+ 1); // Increments modCount!! elementData[size++] = e; return true; }
- 根據源碼我們可知當我們引用add函數時,它首先使用ensureCapacityInternal函數判斷是否需要擴容,若是需要擴容引用ensureExplicitCapacity函數。
1.5 分析private void rangeCheck(int index)源代碼,為什麽該方法應該聲明為private而不聲明為public?
private void rangeCheck(int index) { if (index >= size) throw new IndexOutOfBoundsException(outOfBoundsMsg(index)); }
- 該函數是為了判斷數組越界只需要在該類內部使用就可以了,不需要外部也能使用。
2. HashSet原理
2.1 將元素加入HashSet(散列集)中,其存儲位置如何確定?需要調用那些方法?
- 當元素加入散列表時,首先通過hashcode來計算該函數所因存儲與哈希表中的位置,但該位置有值是判斷兩者是否相等,相等則不需要在加入,不相等則需要運用解決哈西沖突的方法來確定下一個位置。
- 調用方法為計算hashcode的方法和解決哈希沖突的方法。
2.2 將元素加入HashSet中的時間復雜度是多少?是O(n)嗎?
- 元素加入hashset的不是通過遍歷來確定位置,而是通過hashcode來計算位置的所以其時間復雜度不是O(n)。
3. ArrayListIntegerStack
3.1 比較自己寫的ArrayListIntegerStack與自己在題集jmu-Java-04-面向對象2-進階-多態、接口與內部類中的題目自定義接口ArrayIntegerStack,有什麽不同?
- 之前寫自定義接口實現時大部分的方法都是自己編寫並且引用的是固定的數組來存儲數據,而這次我編寫這段程序時候的確實動態數組ArrayList,其封裝性強很多方法都可以調用且數組的長度還是可變的。
3.2 結合該題簡單描述接口的好處,需以3.1為例詳細說明,不可泛泛而談。
- 接口作為抽象方法的集合,能夠使我們在不同的情況下實現接口所定義的抽象函數,就ArrayListIntegerStack接口而言,我們就以前的題和現在的題運用不同的形式來實現這些抽象函數,從而體現多態,是接口適應不同的環境。
4. Stack and Queue
4.1 編寫函數判斷一個給定字符串是否是回文,一定要使用棧(請利用Java集合中已有的類),但不能使用java的Stack類(具體原因自己搜索)與數組。請粘貼你的代碼,類名為Main你的學號。
4.2 題集jmu-Java-05-集合之銀行業務隊列簡單模擬(只粘貼關鍵代碼)。請務必使用Queue接口,並說明你使用了Queue接口的哪一個實現類?
- 本題使用 LinkedList實現類,以實現Queue接口。
5. 統計文字中的單詞數量並按單詞的字母順序排序後輸出
題集jmu-Java-05-集合之5-2 統計文字中的單詞數量並按單詞的字母順序排序後輸出 (作業中不要出現大段代碼)
5.1 實驗總結
- 本實驗使用TreeSet來存儲數據,並使單詞能夠按照字母順序排序,然後在進行輸出。
3.碼雲及PTA
3.1. 碼雲代碼提交記錄
3.2 截圖PTA題集完成情況圖
3.3 統計本周完成的代碼量
周次 | 總代碼量 | 新增代碼量 | 總文件數 | 新增文件數 |
---|---|---|---|---|
1 | 0 | 0 | 0 | 0 |
2 | 0 | 0 | 0 | 0 |
3 | 0 | 0 | 0 | 0 |
4 | 437 | 437 | 7 | 7 |
5 | 905 | 468 | 13 | 6 |
6 | 1294 | 389 | 21 | 8 |
7 | 1678 | 384 | 30 | 9 |
8 | 2184 | 506 | 42 | 12 |
201621123021《JAVA程序設計》第八周學習總結