重生之封装数据类型中的遍历

目录

I. 简介
II. 封装VS不封装
III. 封装遍历的函数设计
        A. 未封装
        B.封装 
                (1)封装需要考虑什么
                (2)代码实现
         Iterator
                  ​例1(链表)
                  例2(二叉树)
        Comsumer 
IV. 封装遍历的性能优化
V. 总结


 I. 简介

封装遍历的优势包括提高代码的可重用性、可测试性和可维护性。它使得功能可以独立于具体的应用场景进行开发和调试,并且可以在不同的项目和模块中共享和重用。

下文我们将针对遍历函数loop()进行封装方法的探究和比较

II. 封装VS不封装

优点:

  1. 封装性强:将遍历和查找功能封装在同一个类中,可以将相关的方法和数据组织在一起,提高代码的可读性和维护性。
  2. 代码复用性高:将遍历和查找功能放在同一个类中,可以在不同的场景下复用这些功能,减少代码的重复编写。
  3. 内聚性增强:将相关的功能放在同一个类中,可以增强类的内聚性,使得类的设计更加一致和清晰。

缺点:

  1. 类的职责不清晰:将遍历和查找功能放在同一个类中,可能导致类的职责不够单一,造成类的设计模糊和复杂化。
  2. 类的大小增加:将多个功能放在同一个类中,会增加类的大小和复杂性,使得类的维护和测试变得更加困难。
  3. 可扩展性受限:如果以后需要添加其他类型的功能,可能会导致类的功能越来越臃肿,增加代码的复杂性。

III. 封装遍历的函数设计

 A. 未封装

如果不进行封装,我们进行遍历查找一般通过index或者手动输入node进行访问,如下面的例子

//二叉树的遍历 
public void preOrder(BinNodePtr node) {
        if (node != null) {
            System.out.println(node);
            preOrder(node.getLeft());
            preOrder(node.getRight());
        } else return;
 }
//链表的遍历
public static void traverseLinkedList(ListNode head) {
        ListNode current = head;
        while (current != null) {
            System.out.println(current.val);
            current = current.next;
        }
 }
//数组的遍历
public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};

        // 使用普通for循环遍历数组
        System.out.println("使用普通for循环遍历数组:");
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }

        // 使用增强for循环遍历数组
        System.out.println("使用增强for循环遍历数组:");
        for (int num : arr) {
            System.out.println(num);
        }

        // 使用流式操作遍历数组
        System.out.println("使用流式操作遍历数组:");
        Arrays.stream(arr).forEach(System.out::println);
        //System.out::println可以替换为Lambda表达式
    }

B.封装 

(1)封装需要考虑什么

创建迭代器(Iterator)将数据集合的遍历和访问操作进行了抽象和封装,提供了一种统一的方式来访问集合中的元素。以下是一些迭代器的好处:

  1. 统一的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值