學習java的第五週學習總結

VI. protected void finalize() throws Throwable //瞭解(面試題中可能有坑)
當對象被判定爲垃圾對象時,由JVM自動調用此方法,用以標記垃圾對象,進入回收隊列。
垃圾對象:沒有有效引用指向此對象時,爲垃圾對象。
垃圾回收: 由GC銷燬垃圾對象,釋放數據存儲空間。
自動回收機制:JVM的內存耗盡,一次性回收所有垃圾對象。
手動回收機制:使用System.gc(); 通知JVM執行垃圾回收。

附加源代碼:Windows --> Preferences --> Java --> Installed JREs --> 選中JRE --> Edit --> xxx/rt.jar --> Source Attachment --> External Location --> External File 選中src.zip

三、包裝類:

  1. 概念:
    I. 基本類型所對應的引用類型
    II. Object可統一所有數據,包裝類的默認值爲null
    III. 包裝類中實際上就是持有了一個基本類型的屬性,作爲數據的存儲空間(Byte中有一個byte屬性),還提供了常用的轉型方法,以及常量,
    既可以存儲值,又具備了一系列的轉型方法和常用常量,比直接使用基本類型的功能更強大。
    IV. 包裝類型中提供了若干轉型的方法,可以讓自身類型與其他包裝類型、基本類型、字符串相互之間進行轉換。

  2. 轉型方法:
    I. 8種包裝類型中,有6種是數字型(Byte、Short、Integer、Long、Float、Double),繼承自java.lang.Number父類。
    II. java.lang.Number父類爲所有子類分別提供了6個轉型的方法,將自身類型轉換成其他數字型。
    byteValue();
    shortValue();
    intValue();
    longValue();
    floatValue();
    doubleValue();

III. parseXXX(String s) 靜態轉型方法,8種包裝類型都有
parseByte(“123”);
parseShort(“123”);
parseInt(“123”);
parseDouble(“123.45”);

IV. valueOf(基本類型)、valueOf(字符串類型),靜態轉型方法,8種包裝類型都有
Byte b1 = Byte.valueOf( (byte)10 );
Byte b2 = Byte.valueOf( “20” );

V. 注意:在使用字符串構建包裝類型對象時,要保證類型的兼容,否則產生NumberFormatException。

VI. JDK5之後,提供自動裝箱、拆箱,簡化使用包裝類的編程過程
Byte b4 = 40;//自動裝箱,將基本類型直接賦值給包裝類型
byte b5 = b4;//自動拆箱,將包裝類型的值,直接賦值給基本類型

VII. 自動裝箱時,會調用valueOf方法,Byte、Short、Integer、Long,四種整數包裝類型都提供了對應的cache緩衝區,將常用的256個數字提前創建對象並保存在數組中,實現複用。即在區間的複用已有對象,在區間外創建新對象。
自動拆箱,會調用xxxValue方法,看什麼類型接受就調用哪個方法

String類
1.String類基礎概念
字符串是常量,創建之後不可改變。
字符串字面值存儲在字符串池中,可以共享。
Strings= “Hello”;產生-一個對象,字符串池中存儲。
String s = new String(“Hello”); //產生兩個對象,堆、池各存儲-一個。而s存儲的是堆中的地址。
舉例:
String a =”abc”;
a =”def”;
這種情況不是字符串改變了,而是變量a指向了另一個字符串地址
反編譯 javap -verbose 字節碼文件名(.class文件) > 字節碼文件名.bytecode
String s1 = “abc”+”def”;這樣和String s1 =”abcdef”一樣就只創建一個對象
String s4 = new String(“Word”);//如果word首次出現並且直接賦值的,他是在String構造裏面直接賦值的,所以他會在堆中和池中分別創建(查看String的構造源碼)

String s1 = “abc”;//1.直接聲明&&2.首次出現(保存在池中)

	String s2 = s1 + "def";//自動優化 StringBuilder.toString()得到的一個 new String(xxx,xxx,xxx) 堆new的是拼接好了的字符串所以def不會在池中創建
	
	//s2.intern();
	
	String s3 = "abcdef";//1.直接聲明&&2.首次出現(保存在池中)
	
	s2.intern();//手工向池中保存s2指向的字符串失敗了
	
	System.out.println(s2 == s3);//比較  s2指向堆中的"abcdef"   s3所指向的池中的"abcdef"
	
	String s4 = s2;//指向堆中,可變
	String s5 = s2.intern();//指向池中,不變(如果池中已有s2所指向的"abcdef"的話,則返回池中的內容一樣的常量的地址)

System.out.println(s4 == s3);
2.String類常用方法
public char charAt(int index) :根據下標獲取字符。
public boolean contains(tring str) :判斷當前字符串中是否包含str。
public charD toCharArray( ):將字符串轉換成數組。
public int indexOf(String str) :查找str首次出現的下標,存在,則返回該下標;不存在,則返回-1。
public int lastIndexOf(String str) :查找字符串在當前字符串中最後一次出現的 下標索引。
public int length():返回字符串的長度。
public String trim():去掉字符串前後的空格。
public String toUpperCase():將小寫轉成大寫。
public boolean endWith(String str):判斷字符串是否以str結尾。
public String replace(char oldChar, char newChat);將舊字符串替換成新字符串
public String] split(String str):根據str做拆分。
System.out.println( upperHi.equals(lowerHi) );//內容必須完全相同,包括大小寫
System.out.println( upperHi.equalsIgnoreCase(lowerHi) );//內容必須完全相同,忽略大小寫
String str = text.substring(0, 5); //獲取字符串text的子串,傳入的參數爲截取開始下標和結束下標,截取的內容是開始下標值和結束下標值的前一個(左包右不包)
VI. protected void finalize() throws Throwable //瞭解(面試題中可能有坑)
當對象被判定爲垃圾對象時,由JVM自動調用此方法,用以標記垃圾對象,進入回收隊列。
垃圾對象:沒有有效引用指向此對象時,爲垃圾對象。
垃圾回收: 由GC銷燬垃圾對象,釋放數據存儲空間。
自動回收機制:JVM的內存耗盡,一次性回收所有垃圾對象。
手動回收機制:使用System.gc(); 通知JVM執行垃圾回收。

附加源代碼:Windows --> Preferences --> Java --> Installed JREs --> 選中JRE --> Edit --> xxx/rt.jar --> Source Attachment --> External Location --> External File 選中src.zip

三、包裝類:

  1. 概念:
    I. 基本類型所對應的引用類型
    II. Object可統一所有數據,包裝類的默認值爲null
    III. 包裝類中實際上就是持有了一個基本類型的屬性,作爲數據的存儲空間(Byte中有一個byte屬性),還提供了常用的轉型方法,以及常量,
    既可以存儲值,又具備了一系列的轉型方法和常用常量,比直接使用基本類型的功能更強大。
    IV. 包裝類型中提供了若干轉型的方法,可以讓自身類型與其他包裝類型、基本類型、字符串相互之間進行轉換。

  2. 轉型方法:
    I. 8種包裝類型中,有6種是數字型(Byte、Short、Integer、Long、Float、Double),繼承自java.lang.Number父類。
    II. java.lang.Number父類爲所有子類分別提供了6個轉型的方法,將自身類型轉換成其他數字型。
    byteValue();
    shortValue();
    intValue();
    longValue();
    floatValue();
    doubleValue();

III. parseXXX(String s) 靜態轉型方法,8種包裝類型都有
parseByte(“123”);
parseShort(“123”);
parseInt(“123”);
parseDouble(“123.45”);

IV. valueOf(基本類型)、valueOf(字符串類型),靜態轉型方法,8種包裝類型都有
Byte b1 = Byte.valueOf( (byte)10 );
Byte b2 = Byte.valueOf( “20” );

V. 注意:在使用字符串構建包裝類型對象時,要保證類型的兼容,否則產生NumberFormatException。

VI. JDK5之後,提供自動裝箱、拆箱,簡化使用包裝類的編程過程
Byte b4 = 40;//自動裝箱,將基本類型直接賦值給包裝類型
byte b5 = b4;//自動拆箱,將包裝類型的值,直接賦值給基本類型

VII. 自動裝箱時,會調用valueOf方法,Byte、Short、Integer、Long,四種整數包裝類型都提供了對應的cache緩衝區,將常用的256個數字提前創建對象並保存在數組中,實現複用。即在區間的複用已有對象,在區間外創建新對象。
自動拆箱,會調用xxxValue方法,看什麼類型接受就調用哪個方法

String類
1.String類基礎概念
字符串是常量,創建之後不可改變。
字符串字面值存儲在字符串池中,可以共享。
Strings= “Hello”;產生-一個對象,字符串池中存儲。
String s = new String(“Hello”); //產生兩個對象,堆、池各存儲-一個。而s存儲的是堆中的地址。
舉例:
String a =”abc”;
a =”def”;
這種情況不是字符串改變了,而是變量a指向了另一個字符串地址
反編譯 javap -verbose 字節碼文件名(.class文件) > 字節碼文件名.bytecode
String s1 = “abc”+”def”;這樣和String s1 =”abcdef”一樣就只創建一個對象
String s4 = new String(“Word”);//如果word首次出現並且直接賦值的,他是在String構造裏面直接賦值的,所以他會在堆中和池中分別創建(查看String的構造源碼)

String s1 = “abc”;//1.直接聲明&&2.首次出現(保存在池中)

	String s2 = s1 + "def";//自動優化 StringBuilder.toString()得到的一個 new String(xxx,xxx,xxx) 堆new的是拼接好了的字符串所以def不會在池中創建
	
	//s2.intern();
	
	String s3 = "abcdef";//1.直接聲明&&2.首次出現(保存在池中)
	
	s2.intern();//手工向池中保存s2指向的字符串失敗了
	
	System.out.println(s2 == s3);//比較  s2指向堆中的"abcdef"   s3所指向的池中的"abcdef"
	
	String s4 = s2;//指向堆中,可變
	String s5 = s2.intern();//指向池中,不變(如果池中已有s2所指向的"abcdef"的話,則返回池中的內容一樣的常量的地址)

System.out.println(s4 == s3);
2.String類常用方法
public char charAt(int index) :根據下標獲取字符。
public boolean contains(tring str) :判斷當前字符串中是否包含str。
public charD toCharArray( ):將字符串轉換成數組。
public int indexOf(String str) :查找str首次出現的下標,存在,則返回該下標;不存在,則返回-1。
public int lastIndexOf(String str) :查找字符串在當前字符串中最後一次出現的 下標索引。
public int length():返回字符串的長度。
public String trim():去掉字符串前後的空格。
public String toUpperCase():將小寫轉成大寫。
public boolean endWith(String str):判斷字符串是否以str結尾。
public String replace(char oldChar, char newChat);將舊字符串替換成新字符串
public String] split(String str):根據str做拆分。
System.out.println( upperHi.equals(lowerHi) );//內容必須完全相同,包括大小寫
System.out.println( upperHi.equalsIgnoreCase(lowerHi) );//內容必須完全相同,忽略大小寫
String str = text.substring(0, 5); //獲取字符串text的子串,傳入的參數爲截取開始下標和結束下標,截取的內容是開始下標值和結束下標值的前一個(左包右不包)
VI. protected void finalize() throws Throwable //瞭解(面試題中可能有坑)
當對象被判定爲垃圾對象時,由JVM自動調用此方法,用以標記垃圾對象,進入回收隊列。
垃圾對象:沒有有效引用指向此對象時,爲垃圾對象。
垃圾回收: 由GC銷燬垃圾對象,釋放數據存儲空間。
自動回收機制:JVM的內存耗盡,一次性回收所有垃圾對象。
手動回收機制:使用System.gc(); 通知JVM執行垃圾回收。

附加源代碼:Windows --> Preferences --> Java --> Installed JREs --> 選中JRE --> Edit --> xxx/rt.jar --> Source Attachment --> External Location --> External File 選中src.zip

三、包裝類:

  1. 概念:
    I. 基本類型所對應的引用類型
    II. Object可統一所有數據,包裝類的默認值爲null
    III. 包裝類中實際上就是持有了一個基本類型的屬性,作爲數據的存儲空間(Byte中有一個byte屬性),還提供了常用的轉型方法,以及常量,
    既可以存儲值,又具備了一系列的轉型方法和常用常量,比直接使用基本類型的功能更強大。
    IV. 包裝類型中提供了若干轉型的方法,可以讓自身類型與其他包裝類型、基本類型、字符串相互之間進行轉換。

  2. 轉型方法:
    I. 8種包裝類型中,有6種是數字型(Byte、Short、Integer、Long、Float、Double),繼承自java.lang.Number父類。
    II. java.lang.Number父類爲所有子類分別提供了6個轉型的方法,將自身類型轉換成其他數字型。
    byteValue();
    shortValue();
    intValue();
    longValue();
    floatValue();
    doubleValue();

III. parseXXX(String s) 靜態轉型方法,8種包裝類型都有
parseByte(“123”);
parseShort(“123”);
parseInt(“123”);
parseDouble(“123.45”);

IV. valueOf(基本類型)、valueOf(字符串類型),靜態轉型方法,8種包裝類型都有
Byte b1 = Byte.valueOf( (byte)10 );
Byte b2 = Byte.valueOf( “20” );

V. 注意:在使用字符串構建包裝類型對象時,要保證類型的兼容,否則產生NumberFormatException。

VI. JDK5之後,提供自動裝箱、拆箱,簡化使用包裝類的編程過程
Byte b4 = 40;//自動裝箱,將基本類型直接賦值給包裝類型
byte b5 = b4;//自動拆箱,將包裝類型的值,直接賦值給基本類型

VII. 自動裝箱時,會調用valueOf方法,Byte、Short、Integer、Long,四種整數包裝類型都提供了對應的cache緩衝區,將常用的256個數字提前創建對象並保存在數組中,實現複用。即在區間的複用已有對象,在區間外創建新對象。
自動拆箱,會調用xxxValue方法,看什麼類型接受就調用哪個方法

String類
1.String類基礎概念
字符串是常量,創建之後不可改變。
字符串字面值存儲在字符串池中,可以共享。
Strings= “Hello”;產生-一個對象,字符串池中存儲。
String s = new String(“Hello”); //產生兩個對象,堆、池各存儲-一個。而s存儲的是堆中的地址。
舉例:
String a =”abc”;
a =”def”;
這種情況不是字符串改變了,而是變量a指向了另一個字符串地址
反編譯 javap -verbose 字節碼文件名(.class文件) > 字節碼文件名.bytecode
String s1 = “abc”+”def”;這樣和String s1 =”abcdef”一樣就只創建一個對象
String s4 = new String(“Word”);//如果word首次出現並且直接賦值的,他是在String構造裏面直接賦值的,所以他會在堆中和池中分別創建(查看String的構造源碼)

String s1 = “abc”;//1.直接聲明&&2.首次出現(保存在池中)

	String s2 = s1 + "def";//自動優化 StringBuilder.toString()得到的一個 new String(xxx,xxx,xxx) 堆new的是拼接好了的字符串所以def不會在池中創建
	
	//s2.intern();
	
	String s3 = "abcdef";//1.直接聲明&&2.首次出現(保存在池中)
	
	s2.intern();//手工向池中保存s2指向的字符串失敗了
	
	System.out.println(s2 == s3);//比較  s2指向堆中的"abcdef"   s3所指向的池中的"abcdef"
	
	String s4 = s2;//指向堆中,可變
	String s5 = s2.intern();//指向池中,不變(如果池中已有s2所指向的"abcdef"的話,則返回池中的內容一樣的常量的地址)

System.out.println(s4 == s3);
2.String類常用方法
public char charAt(int index) :根據下標獲取字符。
public boolean contains(tring str) :判斷當前字符串中是否包含str。
public charD toCharArray( ):將字符串轉換成數組。
public int indexOf(String str) :查找str首次出現的下標,存在,則返回該下標;不存在,則返回-1。
public int lastIndexOf(String str) :查找字符串在當前字符串中最後一次出現的 下標索引。
public int length():返回字符串的長度。
public String trim():去掉字符串前後的空格。
public String toUpperCase():將小寫轉成大寫。
public boolean endWith(String str):判斷字符串是否以str結尾。
public String replace(char oldChar, char newChat);將舊字符串替換成新字符串
public String] split(String str):根據str做拆分。
System.out.println( upperHi.equals(lowerHi) );//內容必須完全相同,包括大小寫
System.out.println( upperHi.equalsIgnoreCase(lowerHi) );//內容必須完全相同,忽略大小寫
String str = text.substring(0, 5); //獲取字符串text的子串,傳入的參數爲截取開始下標和結束下標,截取的內容是開始下標值和結束下標值的前一個(左包右不包)

BigDecimal
位置: java.math包中。
作用:精確計算浮點數。
創建方式: BigDecimal bd=new BigDecimal(“1.0");
方法:
BigDecimal add(BigDecimal bd) 加
BigDecimal subtract(BigDecimal bd) 減
BigDecimal multiply(BigDecimal bd) 乘
BigDecimal divide(BigDecimal bd) 除

BigDecimal除法
除法: BigDecimal(BigDecimal bd,int scal,RoundingMode mode)
參數scal :指定精確到小數點後幾位。
參數mode :
指定小數部分的取捨模式,通常採用四捨五入的模式,
取值爲BigDecimal.ROUND_HALF_UP。
集合:

  1. Collection體系集合:
    I. Collection父接口:該體系結構的根接口,代表一組對象,稱爲“集合”,每個對象都是該集合的“元素”。
    II. List接口的特點:有序、有下標、元素可重複。
    III.Set接口的特點:無序、無下標、元素不可重複。
    IV. Collection接口方法
    特點:代表- -組任意類型的對象,無序、無下標。
    方法:
    boolean add(Object obj) //添加-一個對象。
    boolean addAll(Collection c) //將一個集合中的所有對象添加到此集合中。
    void clear() /清空此集合中的所有對象。
    boolean contains(Object o) //檢查此集合中是否包含o對象
    boolean equals(Object o) //比較此集合是否與指定對象相等。
    boolean isEmpty() /判斷此集合是否爲空
    boolean remove(Object o) //在此集合中移除o對象,也可以傳入下標
    int size() //返回此集合中的元素個數。
    Object[] toArray() //將此集合轉換成數組。

  2. List子接口:
    I. 特點:有序、有下標、元素可以重複。
    II. 繼承可父接口提供的共性方法,同時定義了一些獨有的與下標相關的操作方法。
    III.接口中的方法
    特點:有序、有下標、元素可以重複。
    方法:
    void add(int index, Object o) //在index位置插入對象o。
    boolean addAll(int index, Collection c) //將一個集合中的元素添加到此集合中的index位置。
    Object get(int index) //返回集合中指定位置的元素。
    List subList(int fromIndex, int toIndex) //返回fromIndex和toIndex之間的集合元素。

  3. List實現類:
    I. JDK8的ArrayList,實際初始長度是0(開始是0,擴容之後就變成了10了)
    II. 首次添加元素時,需要實際分配數組空間,執行數組擴容操作
    III.真正向數組中插入數據,(Lazy懶)用的時候再創建,或再加載,有效的降低無用內存的佔用

  4. ArrayList:
    I. 數組結構存儲,查詢快,增刪慢。//註冊(1次)-> 查詢(N次)
    II. JDK 1.2發佈,執行效率快,線程不安全。

  5. Vector:
    I. 數組結構存儲,查詢快,增刪慢。
    II. JDK 1.0發佈,執行效率慢,線程安全。

  6. LinkedList:
    I. 鏈表(鏈接列表)結構存儲,查詢慢、增刪快。

II. 瞭解:Queue接口:隊列、雙端隊列
III. 瞭解:棧結構Last In First Out(後進先出)
IV. 瞭解:隊列結構First In First Out(先進先出)

萬物皆對象,一切皆工具
7. 泛型集合【重點-解決應用問題】:
I. 概念:參數化類型、類型安全的集合,強制集合元素的類型必須一致。
II. 特點:
1). 編譯時即可檢查,而非運行時拋出異常。
2). 訪問時,不必類型轉換(拆箱)。
3). 不同泛型之間引用不能相互賦值,泛型不存在多態。

  1. 泛型:高級類別的知識,熟練應用,需要時間、經驗的積累(常用名稱:E = Element / T = Type / K = Key / V = Value)
    I. 概念:約束-規範類型
    II. 泛型的場景:
    1). 定義泛型:
    A). 實例泛型:
    a). 類:創建對象時,爲類所定義的泛型,進行參數化賦值
    b). 接口:實現接口時,爲接口所定義的泛型,進行參數化賦值

B). 靜態泛型:
a). 定義在方法的返回值類型前面:、、<T extends Comparable>、<T extends Comparable<? super T>>
2). 定義在方法的形參列表當中:<?>、<? extends Object>、<? super Integer>,不支持使用&

  1. Collections工具類:
    概念:集合工具類,定義了除了存取以外的集合常用方法。
    I. public static <T extends Comparable<? super T>> void sort(List list) //排序,要求:必須實現Comparable,必須可與自身類型比,以及父類類型比
    II. public static void reverse(List<?> list) //反轉、倒置元素
    III. public static void shuffle(List<?> list) //隨機重置順序

經驗:一級目標能看懂、能調用,二級目標能定義、能設計

  1. Set子接口:
    I. 特點:無序、無下標、元素不可重複(當插入新元素時,如果新元素與已有元素進行equals比較,結果爲true時,則拒絕新元素的插入)
    II. 方法:全部繼承自Collection中的方法

  2. foreach循環:
    for(數據類型 變量名 : 容器名稱){ //可遍歷集合或數組(常用在無序集合上)
    }

  3. Set接口實現類:
    I. HashSet【重要】:
    1). HashSet的底層使用的HashMap類,即是將所有需要存入HashSet的值,直接保存在HashMap中
    2). HashSet如何去掉重複?
    3). 先判斷hashCode是否一致,==比較地址,equals比較內容

II. LinkedHashSet【瞭解】:
1). 底層使用LinkedHashMap(鏈表結構)存儲,節點形式單獨存儲數據,並可以指向下一個節點,通過順序訪問節點,可保留元素插入順序

III. TreeSet【瞭解】:
1). 實現了SortedSet接口,要求必須可以對元素排序。
2). 所有插入元素,必須實現Comparable接口,覆蓋compareTo方法。
3). 根據compareTo方法返回0作爲去重的依據,(意味重複)

  1. Map體系集合:
    I. Map:地圖、映射
    I. 概念:存儲一對數據(Key-value),無序、無下標、鍵不可重複、值可以重複。

II. HashMap算法:拿到任何一個對象好,通過hash(key)做運算,key>>>16(除以16),只可能得到0~15之間的一個數組,作爲插入數組的下標
III. Hashtable:HashMap的線程安全版本
IV. TreeMap:自動對key做排序,根據compareTo的返回值去重
V. Properties:Hashtable 子類,主要用於存儲key和value都是字符串的情況,常在讀取配置文件之後,保存文件中的鍵值對。反射、JDBC

在這裏插入圖片描述

BigDecimal
位置: java.math包中。
作用:精確計算浮點數。
創建方式: BigDecimal bd=new BigDecimal(“1.0");
方法:
BigDecimal add(BigDecimal bd) 加
BigDecimal subtract(BigDecimal bd) 減
BigDecimal multiply(BigDecimal bd) 乘
BigDecimal divide(BigDecimal bd) 除

BigDecimal除法
除法: BigDecimal(BigDecimal bd,int scal,RoundingMode mode)
參數scal :指定精確到小數點後幾位。
參數mode :
指定小數部分的取捨模式,通常採用四捨五入的模式,
取值爲BigDecimal.ROUND_HALF_UP。
集合:

  1. Collection體系集合:
    I. Collection父接口:該體系結構的根接口,代表一組對象,稱爲“集合”,每個對象都是該集合的“元素”。
    II. List接口的特點:有序、有下標、元素可重複。
    III.Set接口的特點:無序、無下標、元素不可重複。
    IV. Collection接口方法
    特點:代表- -組任意類型的對象,無序、無下標。
    方法:
    boolean add(Object obj) //添加-一個對象。
    boolean addAll(Collection c) //將一個集合中的所有對象添加到此集合中。
    void clear() /清空此集合中的所有對象。
    boolean contains(Object o) //檢查此集合中是否包含o對象
    boolean equals(Object o) //比較此集合是否與指定對象相等。
    boolean isEmpty() /判斷此集合是否爲空
    boolean remove(Object o) //在此集合中移除o對象,也可以傳入下標
    int size() //返回此集合中的元素個數。
    Object[] toArray() //將此集合轉換成數組。

  2. List子接口:
    I. 特點:有序、有下標、元素可以重複。
    II. 繼承可父接口提供的共性方法,同時定義了一些獨有的與下標相關的操作方法。
    III.接口中的方法
    特點:有序、有下標、元素可以重複。
    方法:
    void add(int index, Object o) //在index位置插入對象o。
    boolean addAll(int index, Collection c) //將一個集合中的元素添加到此集合中的index位置。
    Object get(int index) //返回集合中指定位置的元素。
    List subList(int fromIndex, int toIndex) //返回fromIndex和toIndex之間的集合元素。

  3. List實現類:
    I. JDK8的ArrayList,實際初始長度是0(開始是0,擴容之後就變成了10了)
    II. 首次添加元素時,需要實際分配數組空間,執行數組擴容操作
    III.真正向數組中插入數據,(Lazy懶)用的時候再創建,或再加載,有效的降低無用內存的佔用

  4. ArrayList:
    I. 數組結構存儲,查詢快,增刪慢。//註冊(1次)-> 查詢(N次)
    II. JDK 1.2發佈,執行效率快,線程不安全。

  5. Vector:
    I. 數組結構存儲,查詢快,增刪慢。
    II. JDK 1.0發佈,執行效率慢,線程安全。

  6. LinkedList:
    I. 鏈表(鏈接列表)結構存儲,查詢慢、增刪快。

II. 瞭解:Queue接口:隊列、雙端隊列
III. 瞭解:棧結構Last In First Out(後進先出)
IV. 瞭解:隊列結構First In First Out(先進先出)

在這裏插入圖片描述

萬物皆對象,一切皆工具
7. 泛型集合【重點-解決應用問題】:
I. 概念:參數化類型、類型安全的集合,強制集合元素的類型必須一致。
II. 特點:
1). 編譯時即可檢查,而非運行時拋出異常。
2). 訪問時,不必類型轉換(拆箱)。
3). 不同泛型之間引用不能相互賦值,泛型不存在多態。

  1. 泛型:高級類別的知識,熟練應用,需要時間、經驗的積累(常用名稱:E = Element / T = Type / K = Key / V = Value)
    I. 概念:約束-規範類型
    II. 泛型的場景:
    1). 定義泛型:
    A). 實例泛型:
    a). 類:創建對象時,爲類所定義的泛型,進行參數化賦值
    b). 接口:實現接口時,爲接口所定義的泛型,進行參數化賦值

B). 靜態泛型:
a). 定義在方法的返回值類型前面:、、<T extends Comparable>、<T extends Comparable<? super T>>
2). 定義在方法的形參列表當中:<?>、<? extends Object>、<? super Integer>,不支持使用&

  1. Collections工具類:
    概念:集合工具類,定義了除了存取以外的集合常用方法。
    I. public static <T extends Comparable<? super T>> void sort(List list) //排序,要求:必須實現Comparable,必須可與自身類型比,以及父類類型比
    II. public static void reverse(List<?> list) //反轉、倒置元素
    III. public static void shuffle(List<?> list) //隨機重置順序

經驗:一級目標能看懂、能調用,二級目標能定義、能設計

  1. Set子接口:
    I. 特點:無序、無下標、元素不可重複(當插入新元素時,如果新元素與已有元素進行equals比較,結果爲true時,則拒絕新元素的插入)
    II. 方法:全部繼承自Collection中的方法

  2. foreach循環:
    for(數據類型 變量名 : 容器名稱){ //可遍歷集合或數組(常用在無序集合上)
    }

  3. Set接口實現類:
    I. HashSet【重要】:
    1). HashSet的底層使用的HashMap類,即是將所有需要存入HashSet的值,直接保存在HashMap中
    2). HashSet如何去掉重複?
    3). 先判斷hashCode是否一致,==比較地址,equals比較內容

II. LinkedHashSet【瞭解】:
1). 底層使用LinkedHashMap(鏈表結構)存儲,節點形式單獨存儲數據,並可以指向下一個節點,通過順序訪問節點,可保留元素插入順序

III. TreeSet【瞭解】:
1). 實現了SortedSet接口,要求必須可以對元素排序。
2). 所有插入元素,必須實現Comparable接口,覆蓋compareTo方法。
3). 根據compareTo方法返回0作爲去重的依據,(意味重複)

  1. Map體系集合:
    I. Map:地圖、映射
    I. 概念:存儲一對數據(Key-value),無序、無下標、鍵不可重複、值可以重複。

II. HashMap算法:拿到任何一個對象好,通過hash(key)做運算,key>>>16(除以16),只可能得到0~15之間的一個數組,作爲插入數組的下標
III. Hashtable:HashMap的線程安全版本
IV. TreeMap:自動對key做排序,根據compareTo的返回值去重
V. Properties:Hashtable 子類,主要用於存儲key和value都是字符串的情況,常在讀取配置文件之後,保存文件中的鍵值對。反射、JDBC

BigDecimal
位置: java.math包中。
作用:精確計算浮點數。
創建方式: BigDecimal bd=new BigDecimal(“1.0");
方法:
BigDecimal add(BigDecimal bd) 加
BigDecimal subtract(BigDecimal bd) 減
BigDecimal multiply(BigDecimal bd) 乘
BigDecimal divide(BigDecimal bd) 除

BigDecimal除法
除法: BigDecimal(BigDecimal bd,int scal,RoundingMode mode)
參數scal :指定精確到小數點後幾位。
參數mode :
指定小數部分的取捨模式,通常採用四捨五入的模式,
取值爲BigDecimal.ROUND_HALF_UP。
集合:

  1. Collection體系集合:
    I. Collection父接口:該體系結構的根接口,代表一組對象,稱爲“集合”,每個對象都是該集合的“元素”。
    II. List接口的特點:有序、有下標、元素可重複。
    III.Set接口的特點:無序、無下標、元素不可重複。
    IV. Collection接口方法
    特點:代表- -組任意類型的對象,無序、無下標。
    方法:
    boolean add(Object obj) //添加-一個對象。
    boolean addAll(Collection c) //將一個集合中的所有對象添加到此集合中。
    void clear() /清空此集合中的所有對象。
    boolean contains(Object o) //檢查此集合中是否包含o對象
    boolean equals(Object o) //比較此集合是否與指定對象相等。
    boolean isEmpty() /判斷此集合是否爲空
    boolean remove(Object o) //在此集合中移除o對象,也可以傳入下標
    int size() //返回此集合中的元素個數。
    Object[] toArray() //將此集合轉換成數組。

  2. List子接口:
    I. 特點:有序、有下標、元素可以重複。
    II. 繼承可父接口提供的共性方法,同時定義了一些獨有的與下標相關的操作方法。
    III.接口中的方法
    特點:有序、有下標、元素可以重複。
    方法:
    void add(int index, Object o) //在index位置插入對象o。
    boolean addAll(int index, Collection c) //將一個集合中的元素添加到此集合中的index位置。
    Object get(int index) //返回集合中指定位置的元素。
    List subList(int fromIndex, int toIndex) //返回fromIndex和toIndex之間的集合元素。

  3. List實現類:
    I. JDK8的ArrayList,實際初始長度是0(開始是0,擴容之後就變成了10了)
    II. 首次添加元素時,需要實際分配數組空間,執行數組擴容操作
    III.真正向數組中插入數據,(Lazy懶)用的時候再創建,或再加載,有效的降低無用內存的佔用

  4. ArrayList:
    I. 數組結構存儲,查詢快,增刪慢。//註冊(1次)-> 查詢(N次)
    II. JDK 1.2發佈,執行效率快,線程不安全。

  5. Vector:
    I. 數組結構存儲,查詢快,增刪慢。
    II. JDK 1.0發佈,執行效率慢,線程安全。

  6. LinkedList:
    I. 鏈表(鏈接列表)結構存儲,查詢慢、增刪快。

II. 瞭解:Queue接口:隊列、雙端隊列
III. 瞭解:棧結構Last In First Out(後進先出)
IV. 瞭解:隊列結構First In First Out(先進先出)

萬物皆對象,一切皆工具
7. 泛型集合【重點-解決應用問題】:
I. 概念:參數化類型、類型安全的集合,強制集合元素的類型必須一致。
II. 特點:
1). 編譯時即可檢查,而非運行時拋出異常。
2). 訪問時,不必類型轉換(拆箱)。
3). 不同泛型之間引用不能相互賦值,泛型不存在多態。

  1. 泛型:高級類別的知識,熟練應用,需要時間、經驗的積累(常用名稱:E = Element / T = Type / K = Key / V = Value)
    I. 概念:約束-規範類型
    II. 泛型的場景:
    1). 定義泛型:
    A). 實例泛型:
    a). 類:創建對象時,爲類所定義的泛型,進行參數化賦值
    b). 接口:實現接口時,爲接口所定義的泛型,進行參數化賦值

B). 靜態泛型:
a). 定義在方法的返回值類型前面:、、<T extends Comparable>、<T extends Comparable<? super T>>
2). 定義在方法的形參列表當中:<?>、<? extends Object>、<? super Integer>,不支持使用&

  1. Collections工具類:
    概念:集合工具類,定義了除了存取以外的集合常用方法。
    I. public static <T extends Comparable<? super T>> void sort(List list) //排序,要求:必須實現Comparable,必須可與自身類型比,以及父類類型比
    II. public static void reverse(List<?> list) //反轉、倒置元素
    III. public static void shuffle(List<?> list) //隨機重置順序

經驗:一級目標能看懂、能調用,二級目標能定義、能設計

  1. Set子接口:
    I. 特點:無序、無下標、元素不可重複(當插入新元素時,如果新元素與已有元素進行equals比較,結果爲true時,則拒絕新元素的插入)
    II. 方法:全部繼承自Collection中的方法

  2. foreach循環:
    for(數據類型 變量名 : 容器名稱){ //可遍歷集合或數組(常用在無序集合上)
    }

  3. Set接口實現類:
    I. HashSet【重要】:
    1). HashSet的底層使用的HashMap類,即是將所有需要存入HashSet的值,直接保存在HashMap中
    2). HashSet如何去掉重複?
    3). 先判斷hashCode是否一致,==比較地址,equals比較內容

II. LinkedHashSet【瞭解】:
1). 底層使用LinkedHashMap(鏈表結構)存儲,節點形式單獨存儲數據,並可以指向下一個節點,通過順序訪問節點,可保留元素插入順序

III. TreeSet【瞭解】:
1). 實現了SortedSet接口,要求必須可以對元素排序。
2). 所有插入元素,必須實現Comparable接口,覆蓋compareTo方法。
3). 根據compareTo方法返回0作爲去重的依據,(意味重複)

  1. Map體系集合:
    I. Map:地圖、映射
    I. 概念:存儲一對數據(Key-value),無序、無下標、鍵不可重複、值可以重複。

II. HashMap算法:拿到任何一個對象好,通過hash(key)做運算,key>>>16(除以16),只可能得到0~15之間的一個數組,作爲插入數組的下標
III. Hashtable:HashMap的線程安全版本
IV. TreeMap:自動對key做排序,根據compareTo的返回值去重
V. Properties:Hashtable 子類,主要用於存儲key和value都是字符串的情況,常在讀取配置文件之後,保存文件中的鍵值對。反射、JDBC

經驗:每個集合的方法很多,記住集合的特性需要什麼方法我們去Api裏面查

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章