将Longs包装到此列表中

时间:2010-10-18 20:53:00

标签: java

queryParms.add(new Long(empRec));

我正在使用JDK 1.5并使用包裹的长片列表。我的老板看到这个就大喊大叫。

这是一个好方法吗? 它对性能有影响吗? 什么应该替代?

4 个答案:

答案 0 :(得分:3)

没有必要这样做。 Java使用autoboxing自动完成。

简而言之 - 集合不接受原语。因此,无论何时拨打collection.add(longVar),它都会自动转换为collection.add(Long.valueOf(longVar))

另一件事 - 即使在自动装箱不起作用的情况下也不要使用构造函数new Long(..)。使用Long.valueOf(..) - 它首先查看Long个实例的缓存。来自Long.valueOf(..)的文档:

  

如果不需要新的Long实例,通常应优先使用此方法,而不是构造函数Long(long),因为此方法可能通过缓存频繁请求的值来显着提高空间和时间性能。

答案 1 :(得分:2)

你应该让autoboxing为你解决这个问题。您应该阅读“原始类型的自动装箱和自动拆箱”中的示例。


资源:

答案 2 :(得分:2)

另一种方法是利用自动装箱:

queryParms.add(empRec);
但是我会问你的老板他为什么对你大吼大叫。这似乎不是一种让人感到困惑的事情。也许他的大写锁定钥匙坏了? :P

答案 3 :(得分:1)

使用自动装箱可以节省您的输入,正如其他答案所提到的那样;然而,使用自动装箱与你的方式相比,它具有相同的性能;区别仅在于可读性。

如果您想将数字存储在列表中,并且您不知道自己需要多少,这是一个很好的方法。它易于阅读,更复杂的代码片段更容易出错。

如果您确切知道要存储的项目数量,可以创建一个long[]并将数字放在那里。您无需为每个元素创建/获取Long个对象。

但是,在将您编写的代码更改为更复杂的代码之前,例如long[]或其他内容,请注意大多数代码不会影响整体应用程序性能。例如。在一个用户请求中,如果您正在进行一些数据库工作,读取/写入一些文件,进行一些网络活动,并将10个数字写入List<Long>,那么请求的性能将由其他因素决定,这将比创建列表花费1000倍或更多的时间。如果性能是一个问题,那么优化总时间不到1000的东西将不会对整个请求所花费的时间产生任何明显的差异。