- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的上帝感觉告诉我答案是“整数和字符串是不可变的”,但我想得到这里专家的确认。
我有一个遍历方法,它基本上会从根开始遍历整个树。这里有两种用法,第一种不起作用,总是返回0,第二种起作用,ArrayList的结果可以在遍历时累加。
这是第一个:
public int whateverSum(TreeNodeType root, int target) {
int sum = 0;
traverse(root, target, sum);
return sum;
}
这是第二个:
public List<String> whateverSum(TreeNode root, int target) {
List<String> result = new ArrayList<String>();
traverse(root, target, result);
return result;
}
请帮我确认我的想法是否正确。
最佳答案
你说得对。事实上,发生的情况是 traverse 方法传递的是 int 的值,而不是 ArrayList 的值。
好吧,所发生的是值和引用之间的差异。当您将 int 传递给函数时,该值会被复制。该函数访问值的副本。它以任何可能的方式使用它,但最终所有操作都是针对值的副本完成的,而不修改原始值。
当您将对象传递给函数时,您正在传递对其的引用,就像内存地址一样。这是有道理的,因为当您传递包含数百万个项目的 ArrayList 时,您不希望每次都复制这些数百万个项目。因此,被复制的是对此对象的引用,它指向原始结构。
这就是为什么当你将 int 传递给函数时,原始值永远不会被修改。而当您传递 ArrayList 时,它的内容将会改变。
现在,并非所有对象都以这种方式运行,这就是不可变对象(immutable对象)的由来。你说字符串是不可变的,这非常方便。因此,当您对字符串进行修改时,它会被复制,并且原始值也不会改变。 Integer 或 Double 等类型也是不可变的。这很有意义,因为当您递增整数时,您不希望程序中的所有 1 都变成 2。
关于您的代码,为了使第一个方法起作用,您可以执行以下操作:
public int whateverSum(TreeNodeType root, int target) {
int sum = traverse(root, target, 0);
return sum;
}
其中 traverse 返回更新后的总和。
关于java - 我的 traverse 方法不会传递 int 的值,但可以传递 ArrayList 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37269242/
我想知道是否可以构造以下函数 ix :: (Applicative a, Traversable t) => Int -> (v -> a v) -> (t v -> a (t v)) 对除第i个元素
精简版。 Scala 中的大多数泛型集合都有一个 map实际上,该方法将返回相同类型的集合。 (例如, List[A].map(f:A=>B) 返回一个 List[B] 。)Scala 集合库是明确设
早上好/下午好/晚上好。 因此,我们的数据结构类(class)给了我们一个作业,使用以下算法在 java 中分割灰度图像: Input: A gray-scale image with P pixel
我一直在想为什么 Traversable 类型类需要 Functor 和 Foldable,而不仅仅是 Foldable ,因为它不使用仿函数的任何部分? class (Functor t, Fold
JavaScript 和 CSS 在遍历 HTML 元素时都使用自己的 DOM 树。 在JavaScript中,我们可以使用它自己的DOM遍历方法如 element.parentNode elemen
如何在nodejs遍历模块中中断/停止遍历? 我正在遍历 json,在某些情况下,我想停止遍历。 遍历(req.body).forEach(函数(xnode){ log.info("检查 Node :
自然法规定: t . traverse f == traverse (t . f) -- for every applicative transformer t 现在对于法律的 RHS,如果 f 的类
我想在 Java8 节点流中转换树。 这是一个存储数据的节点树,可以选择: public class SelectTree { private D data; private boolean
有人可以向我解释一下,typeclass Traversable 的目的是什么? ? 类型类定义是: class (Functor t, Foldable t) => Traversable (t :
我正在研究Scala 2.8集合类的源代码。我对 scala.collection.Traversable 的层次结构有疑问。查看以下声明: package scala.collection
在我的 ArangoDB 图中,我有一个主题、与该主题关联的消息线程以及这些消息线程内的消息。我想以返回与消息线程关联的数据以及消息线程内的消息计数的方式遍历该图。 数据的结构相当简单:我有主题节点、
问题 1 - 在Scala文档中,我发现Traversable是一个带有抽象方法foreach的trait: http://www.scala-lang.org/docu/files/collecti
在 https://babeljs.io/当我想编译我的 ES6 代码时,将显示此错误: traverse.clearCache is not a function 我的代码是一个简单的代码,例如:
我有以下实现目录遍历的模块: module Walk ( walk ) where import Control.Monad import Contro
我试图弄清楚如何编写一个适用于任何 Traversable[_] 的函数式交换函数,给定一个集合和要交换的索引。我想出了以下内容: def swap[A, CC List(5,2,3,4,1) 我想
假设我们有一些类 Foo这样 Foo f 的实例为我们提供实现 Functor f 所需的一切, Foldable f和 Traversable f .为避免重复实例,可以见证 Foo 之间的这种关系
我记得在某处读到这样的类型不能是 Traversable : data Bar a = Bar a deriving(Show) instance Functor Bar where fmap f
我有一个玫瑰树结构,我想写一个 Traversable 例如。所以我从以下几点开始: data Tree a = Tree a [Tree a] deriving (Show) instance Fu
我正在努力解决如何使用 jQuery 选择特定元素。此处概述的条件: 在我的函数中的相关点,this 引用了一个span。 该 span 可能是子级、孙级或曾孙级,但在层次结构中的某个位置,它由 td
lens报价 holesOf ,这是这个假设函数的一个更通用和更强大的版本: holesList :: Traversable t => t a -> [(a, a -> t a)
我是一名优秀的程序员,十分优秀!