JAVA陪讀
不定期更新
內容大概如下:
目錄(有空會補上錨點連結方便閱讀)
- 寶寶級
- 資料型態相關
- 運算相關
- 常用判斷式與流程控制
- 例外處理(同場加映:註解)
- 關鍵字
- 修飾子
- 介面與抽象方法
- 繼承
- 陣列
- 合集
- 泛型
- 大小寫轉換、排序、替換
- 建構子
- 中學生級(施工中)
- 跟我一起讀檔案!
- 泛型類
- Lambda
- 高級(施工中)
- 演算法
- 鍊表與演算法
- 時間複雜度
- 氣泡排序
- 紅黑樹
- 演算法
以下照序開始
備註
下文中超連結中,
這篇筆記=我寫的筆記,
其他如此篇文章、此篇筆記這樣的敘述,均為他人文章的外連
寶寶級
資料型態相關
- 核對String是否吻合,是用
equals()
方法,而非==
相等運算子- String可以用
replace()
、replaceAll()
取代字串中某些內容 -
trim()
可以消除頭尾空格 -
.toUpperCase()
跟toLowerCase()
分別用於大小寫轉換
- String可以用
- 格式指定碼,及位數指定,可看這篇筆記
運算相關
- 經典考題之我愛用星星印圖形
// 直角三角形 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連線等
*/
}
關鍵字
-
static
與final
:我曾經做過這篇筆記有紀載到相關內容,別人所寫Java static,final 基本概念 此篇文章寫得更詳盡
存取修飾子
我曾經寫過這篇筆記,但此人寫這存取修飾子此篇筆記解釋得更清楚
介面與抽象-interface、abstract
-
abstract
是種修飾子,它可以讓class
、method
變得抽象(註:故遇到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
- 我有了key,我就能取得value,這就是Map的妙用
- TreeMap
- Java集合–TreeMap完全解析此篇文章很深度解說TreeMap的結構
- HashMap
- 常用的方法
- 父類別-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家族(施工中)
- 父類別-Collections
- 了解JAVA資料結構的好處
- 我們可以處理以下小題目,乃至未來更複雜的問題
- 大寫小轉換
- 取代功能
- 一個姓名不會重複的會員清單
- 我們可以處理以下小題目,乃至未來更複雜的問題
進階資料結構好文
建構子
這必須回歸物件導向的精神,設計方法可看這篇筆記,應用方法可看這篇筆記
匿名類別
我曾經寫過這篇筆記
執行緒
我曾經寫過這篇筆記;Android開發用特別多,因為主緒不可上網!
中級(施工中)
跟我一起讀檔案!IO與NIO
我曾經寫過這篇筆記
泛型類、泛型介面
MVC框架中DAO的寫法常用到;Java泛型:泛型类、泛型接口和泛型方法此篇文章寫得很不錯!
Lambda
過去寫過這篇筆記;執行緒常用!
高級(施工中)
鏈表與演算法
此篇文章寫得非常好,還有圖解