?? ?迭代器(Iterator)是一種設計模式,用于順序訪問集合中的元素,而不需要了解集合內(nèi)部的結構。
?? ?迭代器模式將元素的遍歷行為和集合類解耦,使得可以在不修改集合類的情況下遍歷集合。
?? ?具體來說,一個迭代器對象包含了遍歷集合所需的狀態(tài)信息,如當前遍歷的元素位置等。
?? ?迭代器提供了一些方法,如 next() 方法,用于返回當前元素并移動到下一個元素。
?? ?通過這些方法,遍歷者可以順序訪問集合中的元素,而不需知道如何訪問集合內(nèi)部的數(shù)據(jù)結構。
?? ?在Java中,標準庫中提供了迭代器接口(java.util.Iterator),可以在遍歷集合時使用。
?? ?通常使用 for-each 循環(huán)來遍歷集合,實際上 for-each 循環(huán)內(nèi)部就是通過迭代器來遍歷集合的。
?? ?除了 Iterator 接口外,還有 ListIterator 接口、Enumeration 接口等,都可以用于遍歷不同類型的集合。
?? ?
?? ?
?? ?Lambda 表達式,簡稱 Lambda,是 Java 8 中引入的一種新的函數(shù)式編程特性。
?? ?它允許以更簡潔、更直觀的方式定義一個函數(shù),即可以將一個函數(shù)作為參數(shù)傳遞給另一個函數(shù),也可以直接返回一個函數(shù)。
?? ?Lambda 表達式的語法形式為:(arguments) -> expression 或 (arguments) -> { statements; },
?? ?其中 arguments 是函數(shù)參數(shù)列表,expression 或 statements 是函數(shù)體。
?? ?Lambda 表達式的優(yōu)點如下:
?? ?1. 更加簡潔:和傳統(tǒng)的匿名內(nèi)部類相比,Lambda 表達式可以讓代碼更加簡潔,更容易理解。
?? ?2. 代碼更易讀:通過Lambda表達式,可以讓代碼更加直觀,更加易讀。
?? ?3. 更加靈活:Lambda表達式可以賦值給函數(shù)式接口類型,可以在很多地方使用,從而大大提高了編寫代碼的靈活性。
?? ?在實際使用中,Lambda 表達式通常應用于函數(shù)式接口、集合的遍歷、線程的創(chuàng)建等方面,這些場景都需要傳入一個函數(shù)作為參數(shù)。
?? ?
?? ?
?? ?
?? ?泛型(Generics)是在 Java 5 中引入的一種編程技術。它允許在定義類、
?? ?接口和方法時使用類型參數(shù)(Type Parameter),以便在代碼中增加類型安全性和靈活性。
?? ?使用泛型的好處有以下幾個方面:
?? ?1. 提高代碼的可讀性和可維護性:泛型使代碼更加清晰和易于理解,
?? ?同時也減少了類型轉(zhuǎn)換和錯誤的可能性,進而提高了代碼的可維護性。
?? ?2. 增強了代碼的重用性:泛型可以用于任何類型,從而提高了代碼的靈活性和重用性。
?? ?3. 類型安全:泛型在編譯時就能檢查類型錯誤,從而在運行時就能避免類型轉(zhuǎn)換的錯誤。
?? ?4. 減少代碼的冗余:泛型可以省去冗余的代碼,減少了代碼的量。
?? ?在 Java 中,泛型由尖括號里面的參數(shù)指定,它可以用于類、接口和方法之中。
?? ?類和接口的泛型參數(shù)可以用于定義實例變量、方法形式參數(shù)和方法返回類型等位置,
?? ?從而實現(xiàn)類型的約束和靈活性的提升。泛型還支持類型通配符、類型參數(shù)的約束等,這些技術都可以提高泛型編程的效率和適用性。
?? ??? ?
?? ?
?? ?
?? ?
?? ?
?? ?**餓漢式:**
```java
public class Singleton {
? ? // 將自身實例化對象設置為一個屬性,并用static、final修飾
? ? private static final Singleton instance = new Singleton();
? ??
? ? // 構造方法私有化
? ? private Singleton() {}
? ??
? ? // 靜態(tài)方法返回該實例
? ? public static Singleton getInstance() {
? ? ? ? return instance;
? ? }
}
```
“餓漢模式”的優(yōu)缺點:
優(yōu)點:實現(xiàn)起來簡單,沒有多線程同步問題。
缺點:當類SingletonTest被加載的時候,會初始化static的instance,靜態(tài)變量被創(chuàng)建并分配內(nèi)存空間,
從這以后,這個static的instance對象便一直占著這段內(nèi)存(即便你還沒有用到這個實例),當類被卸載時,
靜態(tài)變量被摧毀,并釋放所占有的內(nèi)存,因此在某些特定條件下會耗費內(nèi)存。
**懶漢式(延遲加載):**
延遲加載就是調(diào)用get()方法時實例才被創(chuàng)建(先不急著實例化出對象,等要用的時候才給你創(chuàng)建出來。
不著急,故又稱為“懶漢模式”),常見的實現(xiàn)方法就是在get方法中進行new實例化。
```java
public class Singleton {
? ? // 將自身實例化對象設置為一個屬性,并用static修飾
? ? private static Singleton instance;
? ??
? ? // 構造方法私有化
? ? private Singleton() {}
? ??
? ? // 靜態(tài)方法返回該實例
? ? public static Singleton getInstance() {
? ? ? ? if(instance == null) {
? ? ? ? ? ? instance = new Singleton();
? ? ? ? }
? ? ? ? return instance;
? ? }
}
```
“懶漢模式”的優(yōu)缺點:
優(yōu)點:實現(xiàn)起來比較簡單,當類SingletonTest被加載的時候,靜態(tài)變量static的instance沒有創(chuàng)建對象,
當getInstance方法第一次被調(diào)用時,才創(chuàng)建對象為其賦值,因此在某些特定條件下會節(jié)約了內(nèi)存。
缺點:在多線程環(huán)境中,這種實現(xiàn)方法是完全錯誤的,根本不能保證單例的狀態(tài)。
**線程安全的“懶漢模式”**
```java
public class Singleton {
? ? // 將自身實例化對象設置為一個屬性,并用static修飾
? ? private static Singleton instance;
? ??
? ? // 構造方法私有化
? ? private Singleton() {}
? ??
? ? // 靜態(tài)方法返回該實例,加synchronized關鍵字實現(xiàn)同步
? ? public static synchronized Singleton getInstance() {
? ? ? ? if(instance == null) {
? ? ? ? ? ? instance = new Singleton();
? ? ? ? }
? ? ? ? return instance;
? ? }
}
```
優(yōu)點:在多線程情形下,保證了“懶漢模式”的線程安全。文章來源:http://www.zghlxwxcb.cn/news/detail-502784.html
缺點:眾所周知在多線程情形下,synchronized方法通常效率低,顯然這不是最佳的實現(xiàn)方案。文章來源地址http://www.zghlxwxcb.cn/news/detail-502784.html
到了這里,關于階段性復習 迭代器, Lambda表達式, 泛型, 單例模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!