【发布时间】:2017-02-28 10:31:22
【问题描述】:
假设我有一个包含 100 个字符串的列表。以下两种方法在性能上是否存在差异(或任何其他差异)
1.
List<String> myList = Arrays.asList("s1", "s2", "s3"....."s100");
foo(myList);
private void foo(List<String> myList) {
// logic to choose 2 strings from the list
//do something with -- str1 and str2
}
2.
List<String> myList = Arrays.asList("s1", "s2", "s3"....."s100");
// logic to choose 2 strings from the list
foo(str1, str2);
private void foo(String myStr1, String myStr2) {
//do something with -- myStr1 and myStr2
}
由于 Java 传递列表或单个字符串的引用(作为值),我假设这些参数将只保存(副本)引用/地址。所以我倾向于通过整个列表。
上面将是一个实用方法,我想将“从列表中选择 2 个字符串的逻辑”放在 foo 方法中,这样调用者就不必在调用之前重复该逻辑;但我担心发送一个大列表作为参数。
感谢您的帮助。
** 编辑:** 是的,我正在寻找性能问题。
List<String> 可能不是正确的例子。将其视为Map<String,Long>(城市,温度)。逻辑将始终选择芝加哥和洛杉矶,foo 将根据温度运行。请注意,此逻辑将始终相同,调用者只会在方法 #2 中重复相同的代码。
【问题讨论】:
-
真的应该是
foos 负责选择两个字符串还是只对它们进行操作? -
如果不了解该方法的用例,我认为无法回答这个问题。除非您的问题是关于性能的,否则在这种情况下,答案是选择无关紧要。
-
@ChiefTwoPencils
foo将特别需要这两个字符串值。但是,执行逻辑以选择这些字符串并不一定是foos 的责任。但请注意,逻辑将是相同的,并且如果呼叫者被要求这样做,他们会重复。因此我想把它放在foo. -
@VGR 是的,我的问题主要是关于性能的。所以发送一个巨大的列表作为参数不是问题吗?这是因为只有列表的引用会作为值传递,而不是整个列表?
-
如果您的问题是关于性能的,那么这应该在主题行中。 “更好”是一个非常模棱两可的词。您在问题中也有“和任何其他差异”。
标签: java list methods parameter-passing pass-by-value