JAVA陪讀

不定期更新
內容大概如下:

目錄(有空會補上錨點連結方便閱讀)
  • 寶寶級
    • 資料型態相關
    • 運算相關
    • 常用判斷式與流程控制
    • 例外處理(同場加映:註解)
    • 關鍵字
    • 修飾子
    • 介面與抽象方法
    • 繼承
    • 陣列
    • 合集
    • 泛型
    • 大小寫轉換、排序、替換
    • 建構子
  • 中學生級(施工中)
    • 跟我一起讀檔案!
    • 泛型類
    • Lambda
  • 高級(施工中)
    • 演算法
      • 鍊表與演算法
      • 時間複雜度
      • 氣泡排序
      • 紅黑樹

以下照序開始

備註
下文中超連結中,
這篇筆記=我寫的筆記,
其他如此篇文章、此篇筆記這樣的敘述,均為他人文章的外連


寶寶級

資料型態相關
  • 核對String是否吻合,是用equals()方法,而非==相等運算子
    • String可以用replace()replaceAll()取代字串中某些內容
    • trim()可以消除頭尾空格
    • .toUpperCase()toLowerCase()分別用於大小寫轉換
  • 格式指定碼,及位數指定,可看這篇筆記
運算相關
  • 經典考題之我愛用星星印圖形
          // 直角三角形
          for (int i = 0; i < 10; i++) { // 印換行 我要十行
              for (int k = 9; k > i; k--) {
                  System.out.print(" ");
              }
              for (int j = 0; j <= i; j++) { // 一行要有對應的星星數
                  System.out.print("*");
              }
              System.out.print("\n");
          }
    
          // 倒三角
          for (int i = 1; i < 10; i++) { // 印換行 我要十行
              for (int k = 9; k > i; k--) {
                  System.out.print("*");
              }
              System.out.print("\n");
          }		
    		
          // 等腰三角形
          for (int i = 1; i <= 10; i++)// 印換行 我要十行
          {
              for (int k = 9; k >= i; k--) {// 我觀察到旁邊就是印一個倒三角型
                  System.out.print(" ");
              }
              for (int k = 1; k <= 2 * i - 1; k++) {// 星星數則是等加2
                  System.out.print("*");
              }
              System.out.print("\n");
          }
    

    有參考Java 畫三角形,金字塔,階梯此篇文章做訂正;另外我這方法是寫死的,有點不好看,高手可自行修正

常用判斷式與流程控制
  • 三元運算式:可看這篇筆記
  • for-each:便利(遍歷)好幫手,Java for-each迴圈的用法此篇文章寫得很具體
  • 流程控制
    • break;:中斷這個迴圈
    • return:中斷這個method
      • 還可以返回值
例外處理(同場加映:註解)

順便看看JAVA的單行註解、多行註解

try{ 
    /*
     * 我希望執行的內容
     */
}catch(){ //括號內寫入希望抓住的例外 拋錯
    /*
     * 抓住例外後要執行的事情,常用於顯示錯誤訊息
     */
}finally{
    /*
     * 不管上面如何一定要執行的事情,
     * 常用於關閉檔案、JDBC連線等
     */
}
關鍵字
存取修飾子

我曾經寫過這篇筆記,但此人寫這存取修飾子此篇筆記解釋得更清楚

介面與抽象-interface、abstract
  • abstract是種修飾子,它可以讓classmethod變得抽象(註:故遇到IDE認為不完整的內容,加上abstract方能解決),在他處建立實體需要繼承該父類別並做@Override。抽象類別中的方法可以有自己的內容。另外抽象方法只存在於抽象類別中,其他可以看抽象此篇筆記。
  • 將類別宣告為interface,想使用它們的類別必須在某類別以implements實作。沒有實際的方法。
    • 可以多繼承。
  • 其他相關內容,不才寫過這篇筆記
繼承

可看這篇筆記

陣列

可看這篇筆記

泛型
合集-Collections及它孩子們

大略內容可看這篇筆記,還有些大小寫轉換、排序的方法。別人寫的基礎訓練--(09)JAVA與Collection此篇文章更加易讀且詳盡。

重點整理
  • List
    • 陣列我們需要給定長度,但List介面下的兩個類別,長度都是彈性的
    • ArrayList
      • 有固定索引號
      • 搜尋、更新速度快
      • 但新增、刪除慢
    • LinkedList鍊表
      • 搜尋、更新速度慢
      • 但新增、刪除快
  • Set
    • 內容不可重複
    • TreeSet
      • 按照ASCII排序
      • 當然也可以自訂排序
    • HashSet與泛型
      • 排序是按照哈希值
        Set<Student> s=new HashSet<>();
        s.add(new Student("1", "a", "20"));
        s.add(new Student("2", "a", "20"));
        s.add(new Student("3", "a", "20"));
      
        System.out.println(s); //沒設定hashcode跟equals還是會印出重複的;另外修改數據中的hashcode跟equals判斷條件,可以指定不重複的欄位為何
      
  • Map
  • 常用的方法
    • 父類別-Collections
    • 父類別與子類別常用方法收錄
      • List家族
        /*------------List家族------------*/
        ArrayList<String> str_list = new ArrayList<>();
        str_list.add("a"); // 加一個項目
        str_list.add("b"); 
        str_list.add("c"); 
        str_list.add(4,"d"); //指定索引號
        str_list.remove(0); // 移除對應索引號的項目,此為a
        str_list.contains("s"); //它會判斷是否包含,並回傳一個布林值
        Collections.sort(str_list); //排序,得用父類別Collections
        Collections.reverse(str_list); //反轉
      		
        ArrayList<String> str_list2 = new ArrayList<>();
        str_list2.addAll(str_list); // 把一集合的內容加入
      
        //我可以用迭代器遊歷清單中的內容
        Iterator<String> it=str_list2.iterator();
        while(it.hasNext()) {
            System.out.println(it.next());
        }
        //或是用forEach結合lambda印
        str_list.forEach((x)->System.out.println(x));
      		
        LinkedList<Integer> int_list = new LinkedList<>();
        int_list.add(1);
        int_list.addFirst(0); // 加在頭
        int_list.addLast(2); // 加在尾
      
        int_list.getFirst(); // 得到第一個值
        int_list.getLast(); //得到最後一個值
        int_list.indexOf(1); //它存在嗎?存在返回索引號,不存在會返回-1
        //Queue列隊
        int_list.offer(1); //排隊
        int_list.offerFirst(5); //排到第一個
        int_list.offerLast(6); //排到最後一個
      
      • Map家族(施工中)
      • Set家族(施工中)
  • 了解JAVA資料結構的好處
    • 我們可以處理以下小題目,乃至未來更複雜的問題
      • 大寫小轉換
      • 取代功能
      • 一個姓名不會重複的會員清單
進階資料結構好文
建構子

這必須回歸物件導向的精神,設計方法可看這篇筆記,應用方法可看這篇筆記

匿名類別

我曾經寫過這篇筆記

執行緒

我曾經寫過這篇筆記;Android開發用特別多,因為主緒不可上網!


中級(施工中)

跟我一起讀檔案!IO與NIO

我曾經寫過這篇筆記

泛型類、泛型介面

MVC框架中DAO的寫法常用到;Java泛型:泛型类、泛型接口和泛型方法此篇文章寫得很不錯!

Lambda

過去寫過這篇筆記;執行緒常用!


高級(施工中)

鏈表與演算法

此篇文章寫得非常好,還有圖解