在做类似二叉树遍历等题目时, 发现怎么java都是新建一个list集合,而不是新建一个二叉树,返回 , 但怎么C语言,golang这些语言都是返回指针呢? 这就引起了我的不爽,我Java何时才能站起来。
Java 和 C 语言(或 C++,golang)中的实现差异主要源于它们对数据和内存管理的不同方式。
Java 中的实现
Java 使用自动内存管理和垃圾回收,因此在 Java 中创建并返回一个新的 List 集合是非常常见的做法。List 是 Java 标准库中的一个接口,提供了动态数组的功能,可以很容易地添加、删除元素,并且不需要担心内存分配和释放的问题。在实现二叉树的中序遍历时,我们通常会在递归或迭代的过程中将节点值添加到 List 中,最后返回这个 List。这样做既简单又高效,而且避免了手动管理内存的复杂性。
C 或 C++ 中的实现
C 和 C++ 不提供自动内存管理,程序员需要显式地使用指针来操作动态内存。在这些语言中,如果要求返回中序遍历的结果,通常的做法是返回指向结果的指针。这是因为直接在函数内创建一个动态数组或链表并返回它,可能会导致调用者不知道如何正确地释放这个内存,从而可能造成内存泄漏。因此,更常见的做法是让调用者传递一个指针参数,或者返回一个指针,由调用者负责后续的内存管理。
此外,在 C 或 C++ 中,如果函数返回一个动态分配的数组或链表,那么调用者必须知道这个数组或链表的大小或结构,以便能够正确地访问和释放它。这通常意味着函数还需要返回一些额外的信息,比如数组的长度或者链表的最后一个节点的指针。
简而言之,Java 的自动内存管理和标准库使得返回一个 List 成为一种简单、直观且安全的选择;而在 C 或 C++ 中,由于需要手动管理内存,返回指针并由调用者负责释放是更常见的做法。