阶段性复习 迭代器, Lambda表达式, 泛型, 单例模式

    迭代器(Iterator)是一种设计模式,用于顺序访问集合中的元素,而不需要了解集合内部的结构。
    迭代器模式将元素的遍历行为和集合类解耦,使得可以在不修改集合类的情况下遍历集合。

    具体来说,一个迭代器对象包含了遍历集合所需的状态信息,如当前遍历的元素位置等。
    迭代器提供了一些方法,如 next() 方法,用于返回当前元素并移动到下一个元素。
    通过这些方法,遍历者可以顺序访问集合中的元素,而不需知道如何访问集合内部的数据结构。

    在Java中,标准库中提供了迭代器接口(java.util.Iterator),可以在遍历集合时使用。
    通常使用 for-each 循环来遍历集合,实际上 for-each 循环内部就是通过迭代器来遍历集合的。
    除了 Iterator 接口外,还有 ListIterator 接口、Enumeration 接口等,都可以用于遍历不同类型的集合。


    
    
    Lambda 表达式,简称 Lambda,是 Java 8 中引入的一种新的函数式编程特性。
    它允许以更简洁、更直观的方式定义一个函数,即可以将一个函数作为参数传递给另一个函数,也可以直接返回一个函数。

    Lambda 表达式的语法形式为:(arguments) -> expression 或 (arguments) -> { statements; },
    其中 arguments 是函数参数列表,expression 或 statements 是函数体。

    Lambda 表达式的优点如下:

    1. 更加简洁:和传统的匿名内部类相比,Lambda 表达式可以让代码更加简洁,更容易理解。

    2. 代码更易读:通过Lambda表达式,可以让代码更加直观,更加易读。

    3. 更加灵活:Lambda表达式可以赋值给函数式接口类型,可以在很多地方使用,从而大大提高了编写代码的灵活性。

    在实际使用中,Lambda 表达式通常应用于函数式接口、集合的遍历、线程的创建等方面,这些场景都需要传入一个函数作为参数。

    
    
    

    泛型(Generics)是在 Java 5 中引入的一种编程技术。它允许在定义类、
    接口和方法时使用类型参数(Type Parameter),以便在代码中增加类型安全性和灵活性。

    使用泛型的好处有以下几个方面:

    1. 提高代码的可读性和可维护性:泛型使代码更加清晰和易于理解,
    同时也减少了类型转换和错误的可能性,进而提高了代码的可维护性。

    2. 增强了代码的重用性:泛型可以用于任何类型,从而提高了代码的灵活性和重用性。

    3. 类型安全:泛型在编译时就能检查类型错误,从而在运行时就能避免类型转换的错误。

    4. 减少代码的冗余:泛型可以省去冗余的代码,减少了代码的量。

    在 Java 中,泛型由尖括号里面的参数指定,它可以用于类、接口和方法之中。
    类和接口的泛型参数可以用于定义实例变量、方法形式参数和方法返回类型等位置,
    从而实现类型的约束和灵活性的提升。泛型还支持类型通配符、类型参数的约束等,这些技术都可以提高泛型编程的效率和适用性。
        
    
    
    
    
    **饿汉式:**

```java
public class Singleton {

    // 将自身实例化对象设置为一个属性,并用static、final修饰
    private static final Singleton instance = new Singleton();
    
    // 构造方法私有化
    private Singleton() {}
    
    // 静态方法返回该实例
    public static Singleton getInstance() {
        return instance;
    }
}
```

“饿汉模式”的优缺点:

优点:实现起来简单,没有多线程同步问题。

缺点:当类SingletonTest被加载的时候,会初始化static的instance,静态变量被创建并分配内存空间,
从这以后,这个static的instance对象便一直占着这段内存(即便你还没有用到这个实例),当类被卸载时,
静态变量被摧毁,并释放所占有的内存,因此在某些特定条件下会耗费内存。

**懒汉式(延迟加载):**

延迟加载就是调用get()方法时实例才被创建(先不急着实例化出对象,等要用的时候才给你创建出来。
不着急,故又称为“懒汉模式”),常见的实现方法就是在get方法中进行new实例化。

```java
public class Singleton {

    // 将自身实例化对象设置为一个属性,并用static修饰
    private static Singleton instance;
    
    // 构造方法私有化
    private Singleton() {}
    
    // 静态方法返回该实例
    public static Singleton getInstance() {
        if(instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
```

“懒汉模式”的优缺点:

优点:实现起来比较简单,当类SingletonTest被加载的时候,静态变量static的instance没有创建对象,
当getInstance方法第一次被调用时,才创建对象为其赋值,因此在某些特定条件下会节约了内存。

缺点:在多线程环境中,这种实现方法是完全错误的,根本不能保证单例的状态。

**线程安全的“懒汉模式”**

```java
public class Singleton {

    // 将自身实例化对象设置为一个属性,并用static修饰
    private static Singleton instance;
    
    // 构造方法私有化
    private Singleton() {}
    
    // 静态方法返回该实例,加synchronized关键字实现同步
    public static synchronized Singleton getInstance() {
        if(instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
```

优点:在多线程情形下,保证了“懒汉模式”的线程安全。

缺点:众所周知在多线程情形下,synchronized方法通常效率低,显然这不是最佳的实现方案。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值