重學Java(一)JDK、運算子、資料集合、字串、時間、排序
技術標籤:java
目錄
一.jdk、jre、jvm
JDK是整個JAVA的核心,是開發工具包;JRE是Java執行環境;JVM即java虛擬機器是java執行時的環境。
JDK是 Java語言的軟體開發工具包(SDK)。在JDK的安裝目錄下有一個jre目錄,裡面有兩個資料夾bin和lib,在這裡可以認為bin裡的就是jvm,lib中則是jvm工作所需要的類庫,而jvm和lib合起來就稱為jre。也就是說JDK包含JRE,而JRE包 含JVM。
JDK和JRE區別:在bin資料夾下會發現,JDK有javac.exe而JRE裡面沒有,javac指令是用來將java檔案編譯成class檔案的。
二.運算子
instanceof
前面學習沒有注意過這個instanceof(判斷物件於例項的關係),用法:
if(A instanceof B){
System.out.println("A物件是 B 類的例項");
}
位運算子
>> 右移,>>1 移動一位就相當於除2。-1右移一位是特例,-1右移一位,還是-1,對於大部分編譯器,-1/2的結果一般是0.這個主要與移位設定有關.當負數執行右移位時候,空出來的位置是填補1 而不是0.
<< 左移,移動一位相當於乘2.
>>> 按位右移補零操作符。左運算元的值按右運算元指定的位數右移,移動得到的空位以零填充。
三.資料集合
Collection介面
List介面:儲存有序的,可重複的資料(動態陣列)
1.ArrayList
作為list藉口的主要實現類;執行緒不安全,效率高;底層使用Object[] elementDate儲存
2.LinkedList
對於頻繁的插入,刪除操作,使用此類效率比ArrayList高;底層使用雙方連結串列儲存
3.Vector
作為List介面的古老實現類;執行緒安全的,效率低,底層使用Object[] elementData儲存
Set介面:儲存無序的,不可重複的陣列
1.HashSet
set介面的主要實現類,執行緒不安全 ,可以儲存null
2.LinkedHashSet
作為HashSet的子類;遍歷其內部資料時,可以按照新增的順序遍歷
3.TreeSet
可以按照新增物件的指定屬性,進行排序
Map介面
1.HashMap
作為Map的主要實現類;執行緒不安全的,效率高;儲存null的key和value
2.LinkedHashMap
保證在遍歷map元素時,可以按照新增的順序實現遍歷
3.TreeMap
4.Hashtable
5.Properties
Set,List,Map的工具類 Collections
方法:
synchronizedXXX (如synchronizedList,synchronizedMap):
返回一個執行緒安全的 List,Map…
四.字串
String
不可變的字元序列,底層使用char[]儲存
StringBuffer
可變的字元序列 ,執行緒安全,效率低,低層使用char[]儲存
StringBuilder
可變的字元序列 ,執行緒不安全,效率高 ,JDK5.0新增,低層使用char[]儲存
五.時間
JDK8之前有的時間類
java.util.Date
getTime() 獲取當前Date物件對應的毫秒數.(時間戳)
new Date() 建立一個當前時間的Date物件
new Date(Long time) 傳入time毫秒,從1970年開始過time毫秒的日期
java.sql.Date
util.Date的子類
SimpleDateFormat
作用 :對Date類的格式化和解析
//兩種例項化的格式
SimpleDateFormat simpleDateFormat=new SimpleDateFormat();
SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
- 格式化:日期–>字串
String format = simpleDateFormat.format(date);
- 解析: 字串–>日期
Date parse = simpleDateFormat.parse(s);
日曆類 Calendar類(抽象類)
例項化:
方法一:建立其子類 GregorianCalendar 的物件
方法二:呼叫其靜態方法 getInstance()
Calendar calendar=Calendar.getInstance();
常用方法:
get() 這個月的多少天
int days=calendar.get(Calendar.DAY_OF_MONTH);//這個月的多少天
getTime() 日曆類 --> Date類
Date time = calendar.getTime();
setTime() Date類–>日曆類
calendar.setTime(date);
JDK8新增的時間類
LocalDate,LocalTime,LocalDateTime的使用
LocalDate now = LocalDate.now();//年月日
LocalTime now1 = LocalTime.now();//時分秒
LocalDateTime now2 = LocalDateTime.now();//年月日時分秒
Instant的使用
//對應本初子午線的標準時間
Instant instant=Instant.now();
System.out.println(instant);//2020-08-20T03:22:46.897Z
//新增時間偏移量,計算當地時間
OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
System.out.println(offsetDateTime);//2020-08-20T11:22:46.897+08:00
//toEpochMilli():獲得從1970年1月1日0時0分0秒(UTC)開始的毫秒數 相當於-->Date類的getTime()
long l = instant.toEpochMilli();
System.out.println(l);//1597893942012
//ofEpochMilli(): 通過給的毫秒數,獲得Instant實力 相當於-->Date(Long millis)
Instant instant1 = Instant.ofEpochMilli(1597893942012L);
System.out.println(instant1);//2020-08-20T03:25:42.012Z
常用方法:
DateTimeFormatter:格式化解析日期,時間
六.排序
Comparable介面
自然排序,重寫comparableTo(obj)方法
規則:
如果當前物件this大於形參物件,返回正整數
如果當前物件this小於形參物件,返回負整數
如果當前物件this等於形參物件,返回0
Comparator介面
自定義排序,重新compare(obj o1 , obj o2)