在没有引用传递资源的情况下,如何在java中简化这些代码

How do I simplify this code in java without the resource of passing by reference?

本文关键字:java 代码 引用 资源 情况下      更新时间:2023-10-16

我已经习惯了通过引用使用c++,现在我开始用Java编写更多代码。在leetcode解决问题时,我遇到了一个问题:我试图使用这段代码,所以我不必经常重写这三行。

public void copyAndMoveNodes(ListNode tail, ListNode nodeToCopy) {
tail.next = new ListNode(nodeToCopy.val);
tail = tail.next;
nodeToCopy = nodeToCopy.next;
}

我希望它在c++中也能像这样工作:

void copyAndMoveNodes(ListNode* &tail, ListNode* &nodeToCopy) {
ListNode newNode = new ListNode(nodeToCopy.val);
tail->next = &newNode;
tail = tail->next;
nodeToCopy = nodeToCopy->next;
}

但我发现,在第一段代码中,我只传递了java中对象引用的副本作为writen。

有可能用Java重写它以类似地工作吗?我多次使用这三个命令的序列,但我不想每次都写,这会使代码更加混乱。

解决方案是一个额外的返回值-用于机械翻译。

param = f(param, x);

当有两个引用时非常难看:

  • 一个参数为ListNode[]的void方法
  • 一个参数为CCD_ 2的void方法

最好尝试一下。在集合类上没有问题,在持有下一个字段的节点类上,仍然可以这样做:

Stream.iterate(rootToCopy, node -> node.next != null, node -> node.next)
.forEach(node -> { ... });

即使它会在一对节点上或类似的节点上。

因此,我的结论是:切换到java集合类并对整个列表进行操作使用CCD_ 3。了解了具有引用能力的C++和java,我不觉得在java中有更抽象的风格很难:性能仍然可以,可读性很好,可写性需要练习,表现力和紧凑性都很好。

在第一阶段移植软件的最佳方法是内联方法的代码。

对java:语言设计f(x)永远不会将变量x更改为提高软件质量/代码检查器。