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

这篇具有很好参考价值的文章主要介绍了阶段性复习 迭代器, 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方法通常效率低,显然这不是最佳的实现方案。文章来源地址https://www.toymoban.com/news/detail-502784.html

到了这里,关于阶段性复习 迭代器, Lambda表达式, 泛型, 单例模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Nautilus Chain测试网迎阶段性里程碑,模块化区块链拉开新序幕

    Nautilus Chain 是目前行业内少有的真实实践的 Layer3 模块化链,该链曾在几个月前上线了测试网,并接受用户测试交互。该链目前正处于测试网阶段,并即将在不久上线主网,这也将是行业内首个正式上线的模块化区块链底层。 而在上个月,Nautilus Chain 测试网迎来了阶段性

    2024年02月09日
    浏览(33)
  • 【郭东白架构课 模块二:创造价值】30|节点六:如何保障高质量的阶段性交付?

    你好,我是郭东白。从这节课开始,我们就进入到架构活动的第六个环节——阶段性价值交付。 对于企业来说,这是成本花费最多的节点了,因为大量的研发人力资源开始投入到架构活动中去。 有的架构师认为,到了这个节点,自己似乎已经完成了主要任务。接下来,就主

    2024年02月09日
    浏览(28)
  • 在 Web3 里如何寻找靠谱的创新路径——Solv V3 阶段性复盘(上)

    作者:Solv 核心团队 Solv V3 是 3 月 21 日发布的,到这周一整整三个星期。三周时间产生的实际交易额超过 6,000 万美元,预计在本月内能够破亿。而且从我们手上的 pipeline 来看,这个增长的势头还将持续下去。在几个月内,Solv V3 将产生数亿美元的实际交易量。 在 crypto 市场上

    2024年02月07日
    浏览(40)
  • C++复习笔记--Lambda表达式

    ① [] 用于捕获变量,一般用于使用和修改外部的变量,可以为空; ② (int a, int b) 表示参数列表,可以省略; ③ - int 定义返回类型,一般可以省略,让编译器自动推断; ④ auto f 表示将定义的 lambda 表达式赋值给对象 f,auto 用于自动推断类型; 基本用法如下: ① 使用和修

    2024年02月16日
    浏览(48)
  • 【javaSE】 Lambda表达式与Lambda表达式的使用

    Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。 Lambda 表达式(Lambda expression) ,基于数学中的λ演算得名,也

    2024年02月08日
    浏览(50)
  • 进阶JAVA篇- Lambda 表达式与 Lambda 表达式的省略规则

    目录         1.0 什么是 Lambda 表达式?         1.1 既然跟匿名内部类相关,先来回顾匿名内部类。          1.2 Lambda 表达式与匿名内部类之间的关系。         1.3 函数式接口         1.4 在具体代码中来操作一下         2.0 Lambda 表达式省略规则          Lambda 表达

    2024年02月08日
    浏览(43)
  • 探索Python中的函数式编程:Lambda表达式与函数式工具【第135篇—Lambda表达式】

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在Python编程世界中,函数式编程逐渐成为了一种流行的范式,特别是在处理数据和编写简洁、高效代码时。函数式编程的核心思想是将计算视

    2024年04月08日
    浏览(73)
  • 23.Lambda表达式

    Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。Lambda表达式是Java SE 8中一个重要的新特性。

    2024年02月03日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包