Java學習第四周

容器(集合框架) - 承載其他對象的對象

泛型(generic) - 讓類型不在是程序中的硬代碼(hard code)

此處的extends不是繼承而是泛型限定 限定T類型必須是Comparable接口的子類型

public static <T extends Comparable<T>>void bubbleSort1(T[] array)

GoF設計模式 - 策略模式(用一個繼承結構封裝可變的打折策略)

Collection

  • List

  • ArrayList

  • LinkedList

  • Set

    • HashSet
    • TreeSet
  • Map

  • HasMap

  • TreeMap

public class Test01 {

    public static void main(String[] args) {
        Map<Integer,String> map = new HashMap<>();
        map.put(1, "apple");
        map.put(2, "grape");
        map.put(100, "shit");
        map.put(1, "banana");
        map.remove(100);
        System.out.println(map.size());
        for (Integer key : map.keySet()) {
            System.out.println(key + "--->" + map.get(key));
        }
    }
}

去重、排序

  • 要使用TreeSet ,那么對象必須是可比較的 ,因為TreeSet底層是一棵排序樹
  • 可以通過實現Comparable接口并重寫compareTo方法來實現比較的功能
  • 從Java5開始容器可以指定泛型參數來限定容器中對象引用的類型帶泛型參數的容器比不帶泛型參數的容器在使用上更方便

  • 從Java7開始構造器后面的泛型參數可以省略 - 鉆石語法

  • List兩個實現版本的比較
    ArrayList - 底層實現是一個數組 使用連續內存 可以實現隨機存取
    LinkedList - 底層實現是一個雙向循環鏈表 可以使用碎片內存 不能隨機存取,
    但是增刪元素是需要修改引用即可 所以增刪元素時有更好的性能

  • 容器中只能放對象的引用不能放基本數據類型
    所以向容器中添加基本數據類型時會自動裝箱(anto-boxing)
    所謂自動裝箱就是將基本數據類型處理成對應的包裝類型
    基本類型 包裝類型(Wrapper class)
    byte ---> Byte ---> new Byte(1)
    short ---> Short
    int ---> Integer
    long ---> Long
    float ---> Float
    double ---> Double
    char ---> Character
    boolean ---> Boolean

從Java8開始可以給容器發送forEach消息對原色進行操作
forEach方法的參數可以使方法引用也可以使Lambda表達式
方法引用
list.forEach(System.out::println);
Lambda表達式

            list.forEach(e -> {
            System.out.println(e.toUpperCase());
        });
創建匿名內部類的對象給窗口或者窗口上的控件注冊事件監聽器有三種做法:
  • 1.創建匿名內部類的對象(就地實例化)
  • 2.創建一個內部類對象來充當監聽器(因為有名字隨時都可以創建對象)
  • 3.讓窗口實現接口用窗口對象充當監聽器
    從Java8開始,對于單方法接口(函數式接口)可以使用Lambda表達式
    寫一個匿名方法來編寫事件回調代碼
寫一個工具類的要點:
  • 所有的方法都應該是靜態方法
  • 將構造器私有 不允許調用構造器創建對象
  • 工具類一般不會被繼承所以通常是final的

哈希存儲只要能設計出一個好的哈希函數就是存取性能都特別好的存儲方案
好的哈希函數應該是:不同的對象盡可能產生不同的哈希碼
哈希存儲或者哈希函數 有的地方也稱之為散列存儲或者散列函數

  • 如果要使用HashSet那么一定重寫兩個方法:

    • hashcode() ---> 讓相同的對象產生相同的哈希碼,讓不同的對象盡可能產生不同的哈希碼
    • equals() ---> 定義比較兩個對象的規則(引用,類型,屬性)
    • 自反性
    • 對稱性
    • 傳遞性
    • 一致性
  • StringBuffer 和 StringBuilder代表可變字符串
    對字符串做修改時不會創建新的字符串
    StringBuffer是線程安全的 - 多個線程可以操作同一個StringBuffer對象
    StringBuilder是線程不安全的 - 多個線程同時操作一個StringBuilder時會發生錯誤
    StringBuilder是Java5引入的可變字符串類型,它擁有更好的性能

  • 如果要頻繁的修改一個字符串請不要使用String因為每次修改都有可能創建一個新的字符串對象 所以在這種場景下應該使用StringBuilder或者StringBuffer

正則表達式 - regular expression

定義字符串的匹配模式
"\w"字母數字下劃線 "\d"0-9的數字 "\s"任意空白符
"*"0個或多個 "+"一個或多個 "?"零次或一次

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容