Java中方法的使用和递归

本文详细介绍了JAVA中方法的定义、注意事项及使用方法,包括方法的重载、递归实现等内容,并提供了具体的实例说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法的定义

例:
private static int gcd(int a, int b){
    方法体
   return 返回值
}

每部分的含义:
private static(修饰符)
其中:
private(访问控制符)代表只能在定义此方法的class中被调用。

如果使用 public 则此方法可以被其他class调用。

如果不写,表示在class内部可以访问,在Package内也可以访问,不规范,不建议使用。

static(静态)

int(方法的返回类型)
例:
void:表示没有定义返回类型
int:返回int类型
double:返回double类型
boolean:返回boolean类型

其他类型同理

gcd(方法名称)
命名规则:小驼峰法
在调用方法的时候使用

int a, int b(参数类型)
如果定义为 int…a 则表示参数不定,本质上是一个数组 int[ ] a

{ }(作用域)

方法体
实现此方法的功能

return
返回此方法的返回值,如果方法的返回类型定义为void,则不需要return

注意事项

1.不能在方法中再定义一个方法

2.在调用方法的时候是将传递给参数

3.在传递参数涉及到数组时,要注意。

例:(1)类似两个遥控器控制同一个电视,方法内的操作会将数组里的内容改变
在这里插入图片描述
(2)方法内新建了个数组,相当于两个遥控器控制了两个电视。所以打印的结果还是原来的
在这里插入图片描述

方法的重载

  解决在同一个class中方法名称完全相同,但方法的参数类型个数不同的问题

重载的本质:编译器将其翻译成不同的结果
例:
add(int a, int b) → add_int_int

add(double a, double b) → add_double_double

add(int a, int b, int c) → add_int _int _int
在这里插入图片描述

使用方法实现递归

递归就是自己调用自己

使用递归时先写边界条件,然后再写通项公式

例:使用递归求6的阶乘
在这里插入图片描述

Java 中实现根据 ID 构建树形结构的通用方法,通常涉及递归与数据结构的结合。树形结构的核心在于父子节点的关联,通过递归可以逐层构建出完整的层级结构。以下是一个通用的实现方法,适用于大多数树形结构的构建场景。 ### 通用实现步骤 1. **定义树节点类** 首先需要定义一个树节点类,通常包含节点 ID、父节点 ID、子节点集合等属性。 ```java public class TreeNode { private Integer id; private Integer parentId; private List<TreeNode> children = new ArrayList<>(); // 构造方法、Getter Setter } ``` 2. **构建树形结构的方法** 使用递归方法,结合 `Map` 提高查找效率,避免重复遍历列表。通过 `parentId` 查找所有子节点,并递归构建子树。 ```java public class TreeBuilder { public static List<TreeNode> buildTree(List<TreeNode> nodeList) { Map<Integer, TreeNode> nodeMap = new HashMap<>(); nodeList.forEach(node -> nodeMap.put(node.getId(), node)); List<TreeNode> rootNodes = new ArrayList<>(); for (TreeNode node : nodeList) { if (node.getParentId() == null || node.getParentId() == 0) { rootNodes.add(node); } else { TreeNode parent = nodeMap.get(node.getParentId()); if (parent != null) { parent.getChildren().add(node); } } } return rootNodes; } } ``` 3. **递归构建子树** 如果需要进一步封装递归逻辑,可以定义一个递归方法,根据当前节点 ID 构建其子树。 ```java private static List<TreeNode> buildSubTree(Integer parentId, List<TreeNode> nodeList) { List<TreeNode> children = new ArrayList<>(); for (TreeNode node : nodeList) { if (node.getParentId() != null && node.getParentId().equals(parentId)) { node.setChildren(buildSubTree(node.getId(), nodeList)); children.add(node); } } return children; } ``` ### 性能优化建议 - **使用 `HashMap` 优化查找效率** 在递归过程中,频繁查找子节点可能导致性能瓶颈。使用 `HashMap` 存储节点,通过 ID 快速定位节点,避免重复遍历列表[^2]。 - **避免深度递归导致的栈溢出** 对于深度较大的树结构,递归可能导致栈溢出。可以考虑使用迭代方式替代递归,或者增加 JVM 栈大小。 - **扁平化结构转换** 若前端需要扁平化结构,可以在构建树形结构后,通过广度优先遍历(BFS)将树转换为列表形式。 ### 示例调用 ```java List<TreeNode> rawNodes = // 从数据库或 API 获取原始数据 List<TreeNode> treeRoots = TreeBuilder.buildTree(rawNodes); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值