201521123052《Java程序设计》第7周学习总结
1. 本周學習總結
參考資料:
XMind
2. 書面作業
1.ArrayList代碼分析
1.1 解釋ArrayList的contains源代碼
public boolean contains(Object o) {return indexOf(o) >= 0;}public int indexOf(Object o) {if (o == null) {for (int i = 0; i < size; i++)if (elementData[i]==null)return i;} else {for (int i = 0; i < size; i++)if (o.equals(elementData[i]))return i;}return -1;}public boolean equals(Object obj) {return (this == obj);}答:根據輸入的參數o判斷遍歷ArrayList的時候使用的方法,如果其為null,則遍歷時判斷elementData[i]是否為null,如果其不為null,則遍歷時使用equals方法。
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 workreturn oldValue; } private void rangeCheck(int index) {if (index >= size)throw new IndexOutOfBoundsException(outOfBoundsMsg(index)); }答:先使用rangeCheck方法判斷輸入的參數index是否超出大小范圍,如果是,則輸出IndexOutOfBoundsException異常,如果不是,則刪除指定的元素,之后再將刪除位置之后的元素往前移,最后使得size-1的位置的值為null,并使GC clear it。
1.3 結合1.1與1.2,回答ArrayList存儲數據時需要考慮元素的類型嗎?
答:ArrayList儲存的數據類型都是Object類,Object類是所有類的父類,存儲數據時無需考慮元素的類型。1.1與1.2的源代碼中,并沒有對ArrayList的數據類型有任何定義,所以不需要考慮。
1.4 分析add源代碼,回答當內部數組容量不夠時,怎么辦?
public boolean add(E e) {ensureCapacityInternal(size + 1); // ensureCapacityInternal用來調整容量elementData[size++] = e;return true; } private void ensureCapacityInternal(int minCapacity) {if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);}ensureExplicitCapacity(minCapacity); }modCount++;// overflow-conscious codeif (minCapacity - elementData.length > 0) //如果超出容量,則調用grow方法增加容量grow(minCapacity); } private void grow(int minCapacity) {// overflow-conscious codeint oldCapacity = elementData.length;int newCapacity = oldCapacity + (oldCapacity >> 1); //增加原來容量的一半(右移一位就是/2),也就是說新List的容量是舊的1.5倍if (newCapacity - minCapacity < 0)newCapacity = minCapacity;if (newCapacity - MAX_ARRAY_SIZE > 0)newCapacity = hugeCapacity(minCapacity);// minCapacity is usually close to size, so this is a win:elementData = Arrays.copyOf(elementData, newCapacity); //把舊數組拷貝至新數組,這里說明了并不是增加原來數組的大小,而是引用了一個大小為原來數組1.5倍的新數組。 }1.5 分析private void rangeCheck(int index)源代碼,為什么該方法應該聲明為private而不聲明為public?
private void rangeCheck(int index) {if (index >= size)throw new IndexOutOfBoundsException(outOfBoundsMsg(index)); }答:使用private聲明,說明此方法只在代碼內部進行,而不能被用戶獲取到,而外部確實也沒有用到這個方法的地方,這個方法主要是限制語句的操作范圍,讓使用者可以清晰地發現自己的語句操作越界,而這個rangeCheck操作主要是在代碼內部進行,所以聲明為private而不聲明為public。
2.HashSet原理
2.1 將元素加入HashSet(散列集)中,其存儲位置如何確定?需要調用那些方法?
答:HashSet用鏈表數組實現存儲,每個列表被稱為桶,添加元素時,HashSet會先調用該對象的hashCode()方法得到其hashCode值,根據該值決定該對象在桶中存儲位置。如果桶中已有其他元素,則調用加入對象的equals()方法與已有元素進行比較。如果比較結果為假,則將對象插入桶中。如果比較結果為真,則用新的值替換舊的值。如果有兩個元素通過equals()方法比較返回true,而它們的hashCode()方法返回值不等,HashSet也會將它們存儲在不同的位置。
2.2 選做:嘗試分析HashSet源代碼后,重新解釋1.1
3.ArrayListIntegerStack
題集jmu-Java-05-集合之5-1 ArrayListIntegerStack
3.1 比較自己寫的ArrayListIntegerStack與自己在題集jmu-Java-04-面向對象2-進階-多態、接口與內部類中的題目5-3自定義接口ArrayIntegerStack,有什么不同?(不要出現大段代碼)
public ArrayIntegerStack(int n) {this.arr = new Integer[n]; } public ArrayListIntegerStack(){this.list = new ArrayList<Integer>(); }答:使用內部數組,需提前定好數組大小;使用ArrayList存儲,可自動擴容。
3.2 簡單描述接口的好處.
答:在功能相類似具體方法又不同時,可以使用相同的方法名,不同的實現,從而根據自己的需求,通過不同的方式來實現。
4.Stack and Queue
4.1 編寫函數判斷一個給定字符串是否是回文,一定要使用棧,但不能使用java的Stack類(具體原因自己搜索)。請粘貼你的代碼,類名為Main你的學號。
4.2 題集jmu-Java-05-集合之5-6 銀行業務隊列簡單模擬。(不要出現大段代碼)
5.統計文字中的單詞數量并按單詞的字母順序排序后輸出
題集jmu-Java-05-集合之5-2 統計文字中的單詞數量并按單詞的字母順序排序后輸出 (不要出現大段代碼)
if(set.size() < 10)for(String str : set){System.out.println(str);}else { for (int i = 0; i < 10 ; i++) {System.out.println(set.toArray()[i]);}5.1 實驗總結
答:使用TreeSet時,因為其本身就已經有進行排序,只需按要求遍歷輸出即可。
6.選做:加分考察-統計文字中的單詞數量并按出現次數排序
題集jmu-Java-05-集合之5-3 統計文字中的單詞數量并按出現次數排序(不要出現大段代碼)
6.1 偽代碼
6.2 實驗總結
7.面向對象設計大作業-改進
7.1 完善圖形界面(說明與上次作業相比增加與修改了些什么)
7.2 使用集合類改進大作業
參考資料:
JTable參考項目
3. 碼云上代碼提交記錄及PTA實驗總結
題目集:jmu-Java-05-集合
3.1. 碼云代碼提交記錄
3.2. PTA實驗
編程(5-1, 5-2, 5-3(選做), 5-6)
實驗總結已經在作業中體現,不用寫。
轉載于:https://www.cnblogs.com/JML1225/p/6680841.html
總結
以上是生活随笔為你收集整理的201521123052《Java程序设计》第7周学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JDK并发包
- 下一篇: Java当中的IO一