插入排序 正則表示式 Pattern Matcher Math Random System BigDecimal Date SimpleDateFormat Calendr Collecton
10.30,依舊是天氣晴朗的一天,我掐指一算,是寫部落格的好時候,於是我立刻打開了我的電腦,開始更新部落格 廢話不多說。 本次學習標題不夠啊 看圖吧
首先我們先來重新學習一個演算法:插入排序 直接附上程式碼(比較簡單)
public class PaiXu { public static void main(String[] args) { int arr[]={21,45,32,11,25,71,36}; for (int i = 0; i < arr.length; i++) { int j=i; while (j>0&&arr[j]<arr[j-1]){ int t; t=arr[j]; arr[j]=arr[j-1]; arr[j-1]=t; j--; } } System.out.println(Arrays.toString(arr)); } }
邏輯也很好理解,即將新加入的元素與前元素進行對比,最後形成新的序列。
好了開始我們今天的正題
一、正則表示式
正則表示式——見名知意 正確規則表示式 即設定一個規範 用於規則表示式 例子: String str="[1-9]" 意思為 規則第一個元素為1-9的其中一個 當然我們也可以規定多個 格式為 String str="[1-9]{4-14}" 意思為1-9中的元素 出現4到14次 接下來介紹一下正則的一些表示:
x 字元 x。舉例:‘a’表示字元a \ 反斜線字元。 \n 新行(換行)符 (’\u000A’) \r 回車符 (’\u000D’) ———————————————————————————— [abc] a、b 或 c(簡單類) 要匹配的字元是這裡面的任意一個 返回true 只能是一個 2-3返回false 加-為 到的意思 (範圍) 包含兩邊 【^abc】任何字元,除了 a、b 或 c (只能判斷一個) [a-zA-Z] a到 z 或 A到 Z,兩頭的字母包括在內(範圍) ———————————————————————————— X? X出現一次或一次也沒有 比如""空串 就是沒有 X* X出現零次或多次 大於等於1次 都算多次 X+ X出現一次或多次 X{n} X出現恰好 n 次 X{n,} X出現至少 n 次 X{n,m} X出現至少 n 次,但是不超過 m 次 X>=n&&X<=m、 )———————————————————————————— 我們圖示進行更好的理解
在上上張圖片中我們已經體現了matches功能 判斷一個字串是否與改正則匹配返回布林型別 是一個很方法的方法 接下來我們用圖解釋一下分割和替代 通過上圖 正則的split功能 是將一個字串按照正則進行分割成字元陣列; 而replaceAll功能是將字串按照正則將指定元素進行替代
二、Pattern和Matcher
Pattern 我們稱之為 模式器 Matcher 我們稱之為 匹配器 兩個類相輔相成 互相結合使用 還是跟以前一樣 用圖說話 簡單快捷
在使用這兩個常用類時,我們需要注意 1兩個類相輔相成 配合使用 效果更佳 2find可以理解為指標 group可以理解為擷取 當find找到 3個字母時 group進行擷取 find 後移 跳到下一處 3匯入正則時,使用pattern靜態方法 .compile
三、常用類Math
這個類是數學類 實在沒什麼好說的 大部分都是靜態方法 也很簡單 基本都是和數字打交道的 用思維導圖解釋起來也很方便,就不用 圖示距離了
這個類主要就是記一些方法名 類似 ceil向上取整
四、Random類
這個類也非常簡單 隨機類 主要用於產生隨機數字 注:有種子時產生的隨機數順序是一致的
五、System類
系統類,Emmmmmm依舊是記方法
在IDEA裡輸出的快捷鍵 是sout 現在還有了 serr (錯誤輸出)PS.紅色還挺漂亮
六、BigDecimal類
這個類的一大特點就是高精度,我想和經融打交道的程式設計師會經常使用這個類 依舊是介紹方法 這回連要注意 的事情都在圖中顯示了
七、Date類SimpleDateFormat類
這兩個類我們合起來講 並且做個案例 演示一下
接下來我們用圖演示一下 如何計算 某一天到現在的時間差 在上圖中我們需要注意的是 規則的定義 *
- y 年
- M 月
- d 天
- H 時
- m 分
- s 秒 1、SimpleDateFormat後跟的是時間格式且和輸入格式相對應 這樣才可以解析時間 在使用gettime 從相應格式轉換成 long型別的毫秒 用Date裡gettime得到今天的毫秒值 進行計算 2別忘了 毫秒的進位制 1s=1000ms 3在最後天,年,月,之間的轉換可以由自己決定
八、Calendar類
這個類名為日曆類 用法其實和date差不多 我們通過思維導圖來看看他的用法 這個類是個抽象類 所以不能直接建立他的物件可以通過他的一個靜態成員方法getInstance()來獲取他的物件 它為特定瞬間與一組諸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日曆欄位之間的轉換提供了一些方法,併為操作日曆欄位(例如獲得下星期的日期)提供了一些方法。 該類的可以自行設定時間 很方便
九、Collection類
首先我們為什麼要有Collection類(容器,集合)? 陣列長度固定 不易修改
陣列和集合的區別 (1): 長度區別: 陣列的長度是固定的而集合的長度是可變的 (2): 儲存資料型別的區別: 陣列可以儲存基本資料型別 , 也可以儲存引用資料型別; 而集合只能儲存引用資料型別 (3): 內容區別: 陣列只能儲存同種資料型別的元素 ,集合可以儲存不同型別的元素 Collection下有兩個介面注意是介面 為List和Set 我們幾天今天主要學習List List下還有3個子類 ArrayList linkedlist vector 他們都是集合的含義 接下來我們用思維導圖看看collection中的方法 接下來我用圖示通過上述方法來遍歷集合 在這張圖片我們需要注意的是 1<>裡的東西為泛型 我們 過會講 將來很多地方都要用到泛型(很好用) 2上圖用的是toArray方法將obj轉換成object陣列(陣列無法強轉 元素可以) 3利用增強for迴圈進行遍歷集合的操作 我來介紹一下增強for迴圈的格式 for( (型別 int long object )(名字 隨便取):(遍歷的聚合) ){
} 增強的for迴圈系統會自動計算他的長度
十、迭代器
迭代器也是一種遍歷集合的方式 它的定義就是講集合迭代 遍歷集合 不過之後就不怎麼用了
十一、List介面
接下來是Collection中的一個抽象介面List List中重寫了一些父類中方法 有一些特有的方法 在List當中也可以通過size與for和get的結合進行遍歷
十二、ListIterator
這個為列表迭代器 ListIterator的特有功能 boolean hasPrevious(): 是否存在前一個元素 E previous(): 列表迭代器的特殊功能就是可以反向遍歷,但是有個條件,就是必須先正向遍歷後才可以進行反向遍歷
ConcurrentModificationException出現 迭代器無法修改元素 我們用Iterator這個迭代器遍歷採用hasNext方法和next方法,集合修改集合 會出現併發修改異常 原因是我們的迭代依賴與集合 當我們往集合中新增好了元素之後 獲取迭代器 那麼迭代器已經知道了集合的元素個數 這個時候你在遍歷的時候又突然想給 集合裡面加一個元素(用的是集合的add方法) 那迭代器不同意 就報錯了 C:解決方案 我們用ListIterator迭代器遍歷 用迭代器自帶的add方法新增元素 那就不會報錯了 a:迭代器迭代元素,迭代器修改元素(ListIterator的特有功能add) b:集合遍歷元素,集合修改元素 解決方案2 使用for迴圈遍歷集合 新增元素 不會報錯俗稱甩鍋
我們進行一個總結: List的三個子類的特點 ArrayList: 底層資料結構是陣列,查詢快,增刪慢。 執行緒不安全,效率高。 Vector: 底層資料結構是陣列,查詢快,增刪慢。 執行緒安全,效率低。 LinkedList: 底層資料結構是連結串列,查詢慢,增刪快。 執行緒不安全,效率高。 B:List有三個兒子,我們到底使用誰呢? 得看 要安全還是要效率 是查詢多還是增刪多
十三、ArrayList類LinkedList類Vector類
在介紹完LIst介面和Collection類之後我們現在學習一下List介面下的3個子類 ArrayList LinkedList Vector 關於ArrayList並沒有特別的新東西所以我們跳過ArrayList 直接看後兩個
相比List和Collection而言,新增的方法基本都是針對首尾的,比較 簡單 圖示就略了
注意ArratList重寫了equals方法 我們通過用equals去除元素的方法來體會一下
對於該三者的選擇要視情況
十四、泛型
這部分內容為這次學習的重點 在以後用的也非常多
泛型是什麼? 通用型別可以理解為任意型別
為什麼要有泛型? 早期的Object型別可以接收任意的物件型別,但是在實際的使用中,會有型別轉換的問題。
關於泛型我們可以定義在方法 引數 類,介面上。 我們先來看一下 當泛型類 泛型的使用我會圖示 接下來我都會盡量圖示
定義格式: public class 類名<泛型型別1,…> 我們先來看看定義一個泛型類
一般來說 Y,X,V 等大寫字母都是用來定義泛型 接下來我們使用一下泛型類 在 建立物件時 將泛型定義成具體型別,在使用已定義好的具體型別,這就是泛型的使用 ————————————————————————————————————————————
泛型方法 首先我們定義一個泛型方法 緊接著是泛型方法的使用
———————————————————————————————————————— 泛型介面 定義一個泛型介面
public interface FanXing03 <T> {
public void show(T t);
}
繼承他
public class FanXing3<T> implements FanXing03<T>{
@Override
public void show(T t) {
System.out.println(t);
}
}
注意 :這裡要兩個T 才能定義完泛型介面
public class Test03 {
public static void main(String[] args) {
FanXing03<String> fanXing3 = new <String>FanXing3();
fanXing3.show("100");
}
}
這樣我們就完成了一個簡單的泛型介面初始化到使用的過程
接下來我們再來了解一下泛型的高階萬用字元 泛型萬用字元<?>: 任意型別,如果沒有明確,那麼就是Object以及任意的Java類了 ? extends E: 向下限定,E及其子類 ? super E: 向上限定,E及其父類 我們具體來實現一下 以上方法
class Animal
class cat extends Animal
class dog extends Animal
ublic class Test {
public static void main(String[] args) {
Collection<? extends Animal> objects = new ArrayList<Cat>();
Collection<? super Cat>objects1=new ArrayList<Animal>();
}
}
十五、可變引數
格式:修飾符 返回值型別 方法名(資料型別… 變數名){} 還是上程式碼吧 …
public class Demo {
public static void main(String[] args) {
show(10,20,30,40,50);
}
private static void show(int a,int...b) {
int sum=a;
for(int x:b){
sum+=x;
}
System.out.println(sum);
}
}
執行結果150。
十六、ArrayList的巢狀
public class Test {
public static void main(String[] args) {
ArrayList<Student> obj = new ArrayList<Student>();
obj.add(new Student("張3",18));
obj.add(new Student("張4",19));
obj.add(new Student("張5",20));
obj.add(new Student("張6",21));
ArrayList<Teacher> obj1 = new ArrayList<Teacher>();
obj1.add(new Teacher("李1",30));
obj1.add(new Teacher("李2",31));
obj1.add(new Teacher("李3",32));
obj1.add(new Teacher("李4",33));
ArrayList<ArrayList> objects = new ArrayList<ArrayList>();
objects.add(obj);
objects.add(obj1);
for (int i = 0; i < objects.size(); i++) {
for (int i1 = 0; i1 < obj.size(); i1++) {
System.out.println(obj.get(i1));
}
for (int i1 = 0; i1 < obj1.size(); i1++) {
System.out.println(obj1.get(i1));
}
}
}
}
注意 :在遍歷時一定要重寫 tostring方法
總結:學習的內容越來越多了,每次寫都感覺想寫的東西非常多,但沒辦法一一列舉這一寫又是一天的空閒時間 哇 這是真的累 字數破萬警告