以你喜歡的方式(思惟導圖或其餘)概括總結集合相關內容。
java
contains
源代碼首先調用了indexOf方法。而indexOf方法則是判斷傳入的參數是否爲空,若爲空,則遍歷整個列表,直到遇到某個爲空的元素,返回其下標;若不爲空,則遍歷整個列表,直到遇到某個值與參數相等的元素,返回其下標。若遍歷完後還未找到與參數值相等的元素,則返回-1。contains方法經過判斷調用indexOf方法返回的值是否大於等於0來判斷列表中是否存在該元素。算法
E remove(int index)
源代碼
首先調用rangeCheck()
方法判斷數組是否越界,而後再把被移除的元素後面的元素往前移動一位,最後修改數組大小。數組
不須要,經過以上兩題的源代碼能夠發現傳入參數都爲Object類型,object是java類中的基類,全部類都繼承object,因此設置形參爲object時,其餘全部類型均可以傳入。函數
實際上Arraylist是有初始容量的,且初始容量爲10,因此首先調用ensureCapacityInternal()
方法判斷是否須要對數組進行擴容,若須要則調用ensureExplicitCapacity()
實現擴容。學習
首先判斷指定位置是否越界,不越界的話再相似add(E e)
進行擴容判斷、添加元素。3d
private void rangeCheck(int index)
源代碼,爲何該方法應該聲明爲private而不聲明爲public?由於該方法只是用來判斷數組是否越界,用戶只須要知道結果不須要知道方法的實現過程。指針
首先調用hashCode()
計算出待存儲對象的散列碼(HashCode),做爲存儲的位置的依據,若發生衝突,則調用equals()
方法與已有元素進行比較,若比較結果爲假,就將該元素經過解決衝突的方法放入對應的位置中,若比較結果爲真,就用新值替換舊值。code
時間複雜度爲O(1),由於HashSet是經過哈希算法來實現的,該過程不須要遍歷,是直接計算位置來添加元素。對象
題集jmu-Java-05-集合
之ArrayListIntegerStackblog
jmu-Java-04-面向對象2-進階-多態、接口與內部類
中的題目自定義接口ArrayIntegerStack
,有什麼不一樣?(不要出現大段代碼)本次的ArrayListIntegerStack是用動態數組寫的,而上次的ArrayIntegerStack是用數組實現的。
存儲形式的不一樣致使了後面操做方法的不一樣。
動態數組獲取棧頂元素,能夠經過size()方法來獲取棧頂位置,而數組則須要自定義棧頂指針,經過指針的移動來獲取棧頂位置。
咱們以前已經編寫過接口及實現該接口的ArrayIntegerStack
,如今咱們要新定義一個類ArrayListIntegerStack
,只須要實現這個接口,而後自動添加接口裏的方法,再把這些方法填充實現便可。方便靈活,不用再一個一個編寫方法,同時能夠根據不一樣的工做環境來使用不一樣的方式來實現接口裏的方法。
Stack
類(具體緣由本身搜索)與數組。請粘貼你的代碼,類名爲Main你的學號
。import java.util.LinkedList; import java.util.Scanner; public class Main201621123033{ public static void main(String[] args){ LinkedList<Character> stack=new LinkedList<Character>(); Scanner sr=new Scanner(System.in); String str=sr.next(); char[] ch=str.toCharArray(); boolean flag = true; for(int i=0;i<str.length();i++){ stack.add(ch[i]); } for(int i=0;i<str.length();i++){ if(stack.pollLast().equals(ch[i])){ flag=true; } else{ flag=false; break; } } if(flag==true) System.out.println("這是迴文"); else System.out.println("這不是迴文"); } }
jmu-Java-05-集合
之銀行業務隊列簡單模擬(只粘貼關鍵代碼)。請務必使用Queue
接口,並說明你使用了Queue接口的哪個實現類?Queue<Integer> q1=new LinkedList(); Queue<Integer> q2=new LinkedList();
使用了Queue接口的LinkedList實現類。
題集jmu-Java-05-集合
之5-2 統計文字中的單詞數量並按單詞的字母順序排序後輸出
該題使用了TreeSet來存儲數據,TreeSet具備排序功能且不會添加劇復的數據。
首先使用next()
方法來獲取單詞並調用add()
方法將其添加到Set中,而後打印出單詞數量。接下來定義一個計數用的變量count,遍歷Set中的元素,並打印出來,每打印一次count就+1,直到count大於等於10則跳出循環。
題集jmu-Java-05-集合之5-3 統計文字中的單詞數量並按出現次數排序(不要出現大段代碼)
建立HashMap對象map
開始循環
IF 讀入單詞爲"!!!!!"
退出循環
ELSE IF map中沒有對應key
添加單詞到map中並設置value爲1
ELSE
將key對應的value值加1
建立ArrayList對象list
實現Collections接口對map對象進行排序
輸出map的長度
輸出排序後list中前十個數據
一開始是先建立了一個String[]類型的對象來存儲這些輸入的單詞,而後想一個個遍歷再放進map中,結果發現放入map的過程當中會出現空指針錯誤,最後參照7-2的方式,輸入一個單詞就放進map中。後面排序使用ArrayList實現Colletions接口來實現。
題目集:jmu-Java-05-集合
周次 | 總代碼量 | 新增代碼量 | 總文件數 | 新增文件數 |
---|---|---|---|---|
3 | 547 | 547 | 12 | 12 |
5 | 971 | 424 | 20 | 8 |
6 | 1577 | 606 | 29 | 9 |
7 | 2187 | 1216 | 41 | 21 |
8 | 2793 | 606 | 49 | 8 |
9 | 3040 | 247 | 56 | 7 |