第7周-集合
1. 本周學習總結
以你喜歡的方式(思維導圖或其他)歸納總結集合相關內容。
2. 書面作業
1ArrayList代碼分析
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; }根據輸入的參數o判斷遍歷ArrayList的時候使用的方法,若o為equals,則返回序號,如果o為null,就沒有equals方法。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; }刪掉某個元素后,把后面的元素全部前移,最后再把size-1位置賦null。3 結合1.1與1.2,回答ArrayList存儲數據時需要考慮元素的類型嗎?
使用ArrayList存儲數據是數據類型是object類,它是所有類的父類,不用考慮元素的類型,像1.1,1.2中的ArrayList里元素也沒有定義。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(minCapacity); } private void grow(int minCapacity) {// overflow-conscious codeint oldCapacity = elementData.length;int newCapacity = oldCapacity + (oldCapacity >> 1); 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); } 內部數組容量不夠時,會自動調用grow方法生成一個1.5倍大的數組將原數組元素放進去。5 分析private void rangeCheck(int index)源代碼,為什么該方法應該聲明為private而不聲明為public?
/*** Checks if the given index is in range. If not, throws an appropriate* runtime exception. This method does *not* check if the index is* negative: It is always used immediately prior to an array access,* which throws an ArrayIndexOutOfBoundsException if index is negative.*/ private void rangeCheck(int index) {if (index >= size)throw new IndexOutOfBoundsException(outOfBoundsMsg(index)); }生命為private,則方法只能在類內部實現,而rangeCheck方法只是用來判斷數組是否超界,只在該類內部有效。2HashSet原理
1 將元素加入HashSet(散列集)中,其存儲位置如何確定?需要調用那些方法?
元素加入HashSet中時,HashSet會調用HashCodeC()方法,得到一個'hashcode'值確定元素在列表中的位置;如果桶中已有其他元素,則調用equals()方法與已有元素進行比較。;如果比較結果為真,則用新的值替換舊的值;如果比較結果為假,則將該元素插入桶中。2 選做:嘗試分析HashSet源代碼后,重新解釋1.1
3ArrayListIntegerStack
題集jmu-Java-05-集合之5-1 ArrayListIntegerStack
1 比較自己寫的ArrayListIntegerStack與自己在題集jmu-Java-04-面向對象2-進階-多態、接口與內部類中的題目5-3自定義接口ArrayIntegerStack,有什么不同?(不要出現大段代碼)
5-1中的ArrayListIntegerStack不需要定義數組的大小,list可以對初始容量賦值,而在5-3中的ArrayIntegerStack就需要自己定義數組的大小,需要指針。2 簡單描述接口的好處.
不同的對象可以引同一個方法,可以用接口引用了類,使用相同的方法名,不同的實現。4Stack and Queue
1 編寫函數判斷一個給定字符串是否是回文,一定要使用棧,但不能使用java的Stack類(具體原因自己搜索)。請粘貼你的代碼,類名為Main你的學號。
package project002;import java.util.Scanner; import java.util.Stack;public class Main201521044152 {public static void main(String[] args) {Scanner in = new Scanner(System.in);String str = in.next();System.out.println(isPalindromeNumber(str));}public static boolean isPalindromeNumber(String str){ArrayListTStack myStack = new ArrayListTStack();char[] charArray = str.toCharArray();for (int i = 0; i < charArray.length / 2 ; i++) {myStack.push(String.valueOf(charArray[i])); }for(int i = charArray.length / 2 ; i < charArray.length; i++ ){if( !myStack.pop().equals(String.valueOf(charArray[i])) ) return false;}return true;}}2 題集jmu-Java-05-集合之5-6 銀行業務隊列簡單模擬。(不要出現大段代碼)
建立兩個隊列,奇數放在List1里,偶數放在ListB里,List1輸出兩個然后Listb輸出一個,如果一個隊列為空,則跳出循環并且輸出隊列的剩余元素。for (int i = 0; i <= n; i++) {int x = scanner.nextInt();n=i;continue;if (x % 2 !== 0) {List1.add(x);} else {List2.add(x);}}5統計文字中的單詞數量并按單詞的字母順序排序后輸出
題集jmu-Java-05-集合之5-2 統計文字中的單詞數量并按單詞的字母順序排序后輸出 (不要出現大段代碼)
1 實驗總結
要對單詞的字母順序排序后輸出,需要用到TreeSet;空格為界限分開每個單詞。6選做:加分考察-統計文字中的單詞數量并按出現次數排序
題集jmu-Java-05-集合之5-3 統計文字中的單詞數量并按出現次數排序(不要出現大段代碼)
1 偽代碼
2 實驗總結
7面向對象設計大作業-改進
1 完善圖形界面(說明與上次作業相比增加與修改了些什么)
2 使用集合類改進大作業
參考資料:
JTable參考項目
3. 碼云上代碼提交記錄及PTA實驗總結
題目集:jmu-Java-05-集合
1. 碼云代碼提交記錄
在碼云的項目中,依次選擇“統計-Commits歷史-設置時間段”, 然后搜索并截圖
2. PTA實驗
編程(5-1, 5-2, 5-3(選做), 5-6)
實驗總結已經在作業中體現,不用寫。
轉載于:https://www.cnblogs.com/mz201521044152/p/6681706.html
總結
- 上一篇: 【转】用BlazeMeter录制JMet
- 下一篇: 蓝桥杯-组素数-java