1. 程式人生 > 其它 >重學Java(一)JDK、運算子、資料集合、字串、時間、排序

重學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檔案的。

JRE和JVM區別:JVM並不代表就可以執行class了,JVM執行.class還需要JRE下的lib類庫的支援,尤其是rt.jar

二.運算子

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");
  1. 格式化:日期–>字串
 String format = simpleDateFormat.format(date);
  1. 解析: 字串–>日期
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)