201521123121 《JAVA程序設計》第7周學習總結

1. 本週學習總結

以你喜歡的方式(思惟導圖或其餘)概括總結集合相關內容。

參考資料:java

XMind數組

2. 書面做業

ArrayList代碼分析

1.1 解釋ArrayList的contains源代碼

/**
 * 判斷動態數組是否包含元素o
 */
public boolean contains(Object o) {
    return indexOf(o) >= 0;
}

/**
 * 返回第一個出現的元素o的索引位置
 */
public int indexOf(Object o) {
    if (o == null) {//返回第一個null的索引
        for (int i = 0; i < size; i++)
            if (elementData[i] == null)
                return i;
    } else {//返回第一個o的索引
        for (int i = 0; i < size; i++)
            if (o.equals(elementData[i]))
                return i;
    }
    return -1;//若不包含,返回-1
}

/**
 * 返回最後一個出現的元素o的索引位置
 */
public int lastIndexOf(Object o) {
    if (o == null) {
        for (int i = size - 1; i >= 0; i--)
            if (elementData[i] == null)
                return i;
    } else {
        for (int i = size - 1; i >= 0; i--)
            if (o.equals(elementData[i]))
                return i;
    }
    return -1;
}

首先調用indexOf(),判斷傳入的對象是否爲空,若是爲空,則遍歷整個集合的元素,若是集合的某個元素爲空,返回該元素的下標。
若是傳入對象不爲空,則遍歷整個集合的元素,若是該元素和集合內某個元素的equals比較結構爲true,返回該元素下標。
若是遍歷完集合後沒有元素存在於集合中就返回-1。最後若是indexOf()方法返回大於0,就說明集合內存在該元素,小於0則不存在函數

1.2 解釋E remove(int index)源代碼

/**
 * 刪除指定索引index下的元素,返回被刪除的元素
 */
public E remove(int index) {
    RangeCheck(index);//檢查索引範圍

    E oldValue = (E) elementData[index];//被刪除的元素
    fastRemove(index);
    return oldValue;
}

remove是將index下標的元素去除掉以後,後續元素依次向前移動學習

1.3 結合1.1與1.2,回答ArrayList存儲數據時須要考慮元素的類型嗎?

不須要,arr是一個動態數組(ArrayList),其中能夠放進去多種類型的數據設計

1.4 分析add源代碼,回答當內部數組容量不夠時,怎麼辦?

新建一個新的數組,長度爲內部的一個函數進行計算後返回的結果.以後對a進行copy。copy兩次。
第一次copy爲從0開始,copy長度爲index。
第二次爲從index+1開始,copy長度爲s-index.其實最終目的就是把中間index下標空出來。再將objcet 複製給 a[index]code

1.5 分析private void rangeCheck(int index)源代碼,爲何該方法應該聲明爲private而不聲明爲public?

使用private,外部類不能直接訪問修改該方法,由於外部類沒有修改方法的必要,使用public並非不能夠對象

HashSet原理

2.1 將元素加入HashSet(散列集)中,其存儲位置如何肯定?須要調用那些方法?

向HashSet中添加一個元素時,HashSet會調用該對象的hashCode()方法獲得其hashCode值,而後根據該值決定該對象的存儲位置,
可是若是有兩個元素經過equals()方法比較返回true,而它們的hashCode()方法返回值不等,HashSet也會將它們存儲在不一樣的位置blog

ArrayListIntegerStack

題集jmu-Java-05-集合之5-1 ArrayListIntegerStack

3.1 比較本身寫的ArrayListIntegerStack與本身在題集jmu-Java-04-面向對象2-進階-多態、接口與內部類中的題目5-3自定義接口ArrayIntegerStack,有什麼不一樣?(不要出現大段代碼)

ArrayListIntegerStac使用ArrayList存儲,能夠擴充容量;ArrayIntegerStack使用integer數組,數組容量須要事先設定排序

3.2 簡單描述接口的好處.

接口更容易實現擴展功能,java類與類之間只能單繼承,類與接口之間能夠多實現,不改源碼,能夠定義多個接口加強功能,之後複寫接口中的抽象方法
寫小的應用程序看不到接口的優點,寫大點的程序就顯示出接口的優點繼承

Stack and Queue

4.1 編寫函數判斷一個給定字符串是不是迴文,必定要使用棧,但不能使用java的Stack類(具體緣由本身搜索)。請粘貼你的代碼,類名爲Main你的學號。

public class Main2015121 {

public static void main(String[] args) {
    Stack<Character> stack = new Stack<Character>();
    Scanner scanner = new Scanner(System.in);
    int a = 1;
    String string = scanner.next(); 
    for (int i = 0; i < string.length(); i++) {
        stack.push(string.charAt(i)); 
    }
   for (int j= 0; j < string.length(); j++) {
        if (stack.pop() != string.charAt(j)) {
            System.out.println("否");
            break;
        }
        else {
            System.out.println("是");
            break;
            }
        }
     }
}

4.2 題集jmu-Java-05-集合之5-6 銀行業務隊列簡單模擬。(不要出現大段代碼)

首先須要針對 A 和 B 業務設計兩個循環隊列,分別處理兩類業務請求;
而後 根據輸入序列整數的奇偶性將各個整數分配到這兩個隊列中。
另外,須要設計針 對兩個隊列處理過程的流程,這是一個循環。
在循環中,先從 A 隊列中輸出兩個 元素,而後再從 B 隊列中輸出一個元素。當發現某一個隊列中的元素爲空時,輸 出另外一個隊列中的全部元素
注意對隊列滿、空狀況的 判斷。

統計文字中的單詞數量並按單詞的字母順序排序後輸出

題集jmu-Java-05-集合之5-2 統計文字中的單詞數量並按單詞的字母順序排序後輸出 (不要出現大段代碼)


這裏能夠用String裏的split方法分割這個字符串,這樣就能夠統計單詞數和排序了

5.1 實驗總結

還能夠用Scanner類,Scanner類是一個掃描器,它能夠掃描根據咱們的要求字符串,達到想要的結果

面向對象設計大做業-改進
7.1 完善圖形界面(說明與上次做業相比增長與修改了些什麼)
7.2 使用集合類改進大做業
參考資料:
JTable參考項目

3. 碼雲上代碼提交記錄及PTA實驗總結

題目集:jmu-Java-05-集合

3.1. 碼雲代碼提交記錄

在碼雲的項目中,依次選擇「統計-Commits歷史-設置時間段」, 而後搜索並截圖

相關文章
相關標籤/搜索