20175214 《Java程序設計》第8周學習總結

20175214 《Java程序設計》第4周學習總結


前言:因爲我的緣由回家了兩週,java學習進程落下了兩週,且目前需交的實驗報告較多,暫時沒法補上前兩次的博客,在未來會陸續補上,此次直接跳到當前課堂進度。


本週學習任務總結

一、根據《java2實用教程》和藍墨雲學習視頻學習第十五章;html

二、嘗試將課本重點內容用本身的話複述手打;java

三、輸入課本代碼並上傳碼雲;git

四、使用IDEA調試代碼;算法

五、學習使用API。編程


教材學習重點內容總結

  • 15.1 泛型安全

    初步的瞭解:主要用於創建具備類型安全的集合構架,如鏈表、散列映射等數據結構。數據結構

    • 15.1.1 泛型類聲名學習

      • eg:class People<E>設計

      • analysis:People泛型類的名稱,E是其中的泛型,但並無指定E是何種類型的數據,它能夠是任何對象或接口,但不能是基本類型數據調試

    • 15.1.2 使用泛型類聲明對象

      • 泛型類聲明和建立對象時,類名後多了一對<>,並且必需要用具體的類型替換<>中的泛型。例如:
      Cone<Circle> coneOne;
      coneOne =new Cone<Circle>(new Circle());
      • 使用泛型類的優勢在於,使用這些泛型類創建的數據結構時,沒必要進行強制類型轉換,即不要求進行運行時類型檢查。
  • 15.2 鏈表

    • 鏈表:由若干個稱做結點的對象組成的一種數據結構
      • 單鏈表(圖15.2):每一個結點含有一個數據和下一個結點的引用;
      • 雙鏈表(圖15.3):每一個結點含有一個數據並含有上一個結點的引用和下一個結點的引用;
    • 15.2.1 LinkedList 泛型類
      • java.util包中的LinkedList<E>泛型類建立的對象以鏈表結構存儲數據,習慣上稱LinkedList類建立的對象爲鏈表對象

      • eg: LinkedList<String> mylist=new LinkedList<String>();
      • analysis:即建立一個空雙鏈表。

      • 使用LinkedList<E>泛型類聲名建立鏈表時,必需要指定E的具體類型,而後鏈表就可使用add(E obj)方法向鏈表依次增長結點。例如,上述鏈表mylist使用add方法添加結點
      • 結點中的數據必須是String對象,以下列代碼所示:

mylist.add ("How") ;
mylist.add("Are") ;
mylist.add ("You") ;
mylist. add ("Java") ;

這時,鏈表mylist就有了有4個結點,結點是自動連接在起的,不須要咱們作連接,
也就是說,不須要操做安排結點中所存放的下一個或上一個結點的引用。

  • 15.2.2 LinkedList泛型類經常使用方法
    • LinkedList<E>泛型類是實現了泛型接口List<E>的泛型類,而泛型接口List<E>又是Collection<E>泛型接口的子接口。LinkedList<E>泛型類中的絕大部分方法都是泛型接口方法的實現。

    • 編程時,可使用接口回調技術,即把LinkedList<E>對象的引用賦值給Collection<E>接口變量或List<E>接口變量,藉口就能夠調用類實現的接口方法

    LinkedList<E>泛型類實現Lis<E>泛型接口中的一些經常使用方法:
    
    public boolean add(E element)  向鏈表末尾添加一個新的節點,該節點中的數據是參數elememt指定的數據。
    
    public void add(int index ,E element)  向鏈表的指定位置添加一個新的節點,該節點中的數據是參數elememt指定的數據。
    
    public void clear()  刪除鏈表的全部節點,使當前鏈表成爲空鏈表。
    
    public E remove(int index)  刪除指定位置上的節點。
    
    public boolean remove(E element)  刪除首次出現含有數據elemen的節點。
    
    public E get(int index)  獲得鏈表中指定位置處節點中的數據。
    
    public int indexOf(E element)  返回含有數據element的節點在鏈表中首次出現的位置,若是鏈表中無此節點,則返回-1。
    
    public int lastIndexOf(E element)  返回含有數據element的節點在鏈表中最後出現的位置,若是鏈表中無此節點,則返回-1。
    
    public E set(int index, E element)   將當前鏈表index位置節點中的對象element替換爲參數element指定的對象,並返回被替換的對象。
    
    public int size()   返回鏈表的長度,即節點的個數。
    
    public boolean contains(Object element)   判斷鏈表中節點中是否有節點含有對象element。
    LinkedList<E>泛型類自己新增長的一些經常使用方法:
    
    public void addFirst(E element)  向鏈表的頭添加新節點,該節點中的數據是參數elememt指定的數據。
    
    public void addLast(E element)  向鏈表的末尾添加新節點,該節點中的數據是參數elememt指定的數據。
    
    public E getFirst()  獲得鏈表中第一個節點中的數據。
    
    public E removeFirst()  刪除第一個節點,並返回這個節點中的數據。
    
    public E removeLast()  刪除最後一個節點,並返回這個節點中的數據。
    
    public Object clone()  獲得當前鏈表的一個克隆鏈表,該克隆鏈表中節點數據的改變不會影響到當前鏈表中的節點數據,反之亦然。
    • 因爲LinkedList不是順序結構,調用get(int index)方法較慢,故而當用戶須要遍歷集合中的對象時,應當使用該集合提供的迭代器,而不是讓集合自己來遍歷其中的對象。

    • 因爲迭代器遍歷集合的方法在找到集合中的一個對象的同時,也獲得待遍歷的後繼對象的引用,所以迭代器能夠快速地遍歷集合。

    • 鏈表對象可使用iterator()方法獲取一個Iterator對象,該對象就是針對當前鏈表的迭代器。

    • 使用get()獲取一個結點中的對象時,要用類型轉換運算符轉換回原來的類型。

  • 15.2.4 排序與查找
Collections類提供的用於排序和查找的類方法以下:

public static sort(List<E> list) 該方法能夠將list中的元素升序排列。

int binarySearch(List<T> list, T key,CompareTo<T> c) 使用折半法查找list是否含有和參數key相等的元素,若是key鏈表中某個元素相等,方法返回和key相等的元素在鏈表中的索引位置(鏈表的索引位置從0開始),不然返回-1。
  • String類實現了Comparable接口,規定字符串按字典序比較大小。

  • 若鏈表中存放的是非字符串數據,那麼建立對象的類必須實現Comparable接口,即實現該接口中的方法int compareTo(Object b)來規定對象的大小關係。

  • 15.2.5 洗牌與旋轉

    Collections類還提供了將鏈表中的數據從新隨機排列的類方法以及旋轉鏈表中數據的類方法。
    
    public static void shuffle(List<E> list) 將list中的數據按洗牌算法從新隨機排列。
    
    static void rotate(List<E> list, int distance) 旋轉鏈表中的數據。
    
    public static void reverse(List<E> list) 翻轉list中的數據。
  • 15.3 堆棧

    堆棧是一種「後進先出」的數據結構。堆棧都是一種數據項按序排列的數據結構,只能在一端(稱爲棧頂(top))對數據項進行插入和刪除。
    • 堆棧將第一個進入的數據放在最底下,而把後續放入的數據放在已有數據的頂上。

    • 向堆棧中輸入數據的操做稱做「壓棧」,輸出稱爲「彈棧」,彈棧即輸出(刪除)最後壓入棧中的數據。

Stack<E>泛型類建立一個堆棧對象,堆棧對象經常使用方法:

public E push(E item);實現壓棧操做

public E pop();實現彈棧操做。

public boolean empty();判斷堆棧是否還有數據。

public E peek();獲取堆棧頂端的數據,但不刪除該數據。

public int search(Object data);獲取數據在堆棧中的位置。
  • 15.4 散列映射

    • 15.4.1 HashMap<K,V>泛型類

      • HashMap<K,V>對象採用散列表這種數據結構存儲數據,習慣上稱HashMap<K,V>對象爲散列映射

      • eg: HashMap<String,Student> hashtable= HashSet<String,Student>();

      • hashtable能夠存儲「鍵/值」對數據。
        • 相關方法:
        public V put(K key,V value)      將鍵/值對數據存放到散列映射中,該方法同時返回鍵所對應的值。
  • 15.4.2 經常使用方法

    public void clear() 清空散列映射。
    
    public Object clone() 返回當前散列映射的一個克隆。
    
    public boolean containsKey(Object key) 若是散列映射有「鍵/值」對使用了參數指定的鍵,方法返回true,不然返回false。
    
    public boolean containsValue(Object value) 若是散列映射有「鍵/值」對的值是參數指定的值。
    
    public V get(Object key) 返回散列映射中使用key作鍵的「鍵/值」對中的值。
    
    public boolean isEmpty() 若是散列映射不含任何「鍵/值」對,方法返回true,不然返回false。
    
    public V remove(Object key) 刪除散列映射中鍵爲參數指定的「鍵/值」對,並返回鍵對應的值。
    
    public int size() 返回散列映射的大小,即散列映射中「鍵/值」對的數目。
  • 15.4.3 遍歷散列映射

    • public Collection<V> values()方法返回一個實現Collection<V>接口類建立的對象。

    • 使用接口回調技術,即將該對象的引用賦給Collection<V>接口變量,該接口變量能夠回調iterator()方法獲取一個Iterator對象,這個Iterator對象存放着散列映射中全部「鍵/值」對中的「值」。

  • 15.4.4 基於散列映射的查詢

    • 對於常常須要進行查找的數據能夠採用散列映射來存儲這樣的數據,即爲數據指定一個查找它的關鍵字,而後按着「健-值」對,將關鍵字和數據一併存入散列映射中。
  • 15.5 樹集

    • 15.5.1 TreeSet 泛型類

      • TreeSet類建立的對象稱做樹集。

      • eg: TreeSet<String> mytree=new TreeSe<String>();
        • 而後使用add方法爲樹集添加節點,例如:mytree.add("boy");
    • 15.5.2 結點的大小關係

    • 樹集用add方法添加節點,節點會按其存放的數據的「大小」順序一層一層地依次排列,在同一層中的節點從左到右按「大小」順序遞增排列,下一層的都比上一層的小。

    • 15.5.3 TreeSet類的經常使用方法

    public boolean add(E o) 向樹集添加加節點。
    
    public void clear() 刪除樹集中的全部節點。
    
    public void contains(Object o) 若是樹集中有包含參數指定的對象,該方法返回true,不然返回false 。
    
    public E first() 返回樹集中的第一個節點中的數據(最小的節點)。
    
    public E last() 返回最後一個節點中的數據(最大的節點)。
    
    public isEmpty() 判斷是不是空樹集,若是樹集不含任何節點,該方法返回true 。
    
    public boolean remove(Object o) 刪除樹集中的存儲參數指定的對象的最小節點。
    
    public int size() 返回樹集中節點的數目。
    • 15.6 樹映射

      • TreeMap<K,V>類實現了Map<K,V>接口,稱TreeMap<K,V>對象爲樹映射。

      • 樹映射使用public V put(K key,V value);方法添加節點。

    • 15.7 自動裝箱與拆箱

      • JDK1.5新增的基本類型數據和相應的對象之間相互自動轉換的功能,稱做基本數據類型的自動裝箱與拆箱(Autoboxing and Auto-Unboxing of Primitive Types)。

教材學習中的問題和解決過程

  • 問題1:Example5_10中的註釋自動裝箱,實際添加到list中的是new Integer(i)是什麼意思。
  • 問題1解決方案:查閱資料詳解Java的自動裝箱與拆箱(Autoboxing and unboxing) ,基本數據類型進入相似鏈表的數據結構時會發生new Integer()的調用。拆箱同理,即逆過程。

  • 問題2junit 沒法使用,報紅
  • 問題2解決方案:雙擊testcase,出現紅色小燈泡,點擊後根據提示添加junit3 path

  • 問題3:編譯時提示:使用未經檢查或不安全的的操做
  • 問題3解決方案:在類前面加@SuppressWarnings("unchecked")

  • 問題4:運行Example15_7時,不管輸入哪一個單詞都顯示沒有此單詞

  • 問題4解決方案:如圖,添加路徑。


代碼託管

相關文章
相關標籤/搜索