queryParms.add(new Long(empRec));
我正在使用JDK 1.5并使用包裹的长片列表。我的老板看到这个就大喊大叫。
这是一个好方法吗? 它对性能有影响吗? 什么应该替代?
答案 0 :(得分:3)
没有必要这样做。 Java使用autoboxing自动完成。
简而言之 - 集合不接受原语。因此,无论何时拨打collection.add(longVar)
,它都会自动转换为collection.add(Long.valueOf(longVar))
另一件事 - 即使在自动装箱不起作用的情况下也不要使用构造函数new Long(..)
。使用Long.valueOf(..)
- 它首先查看Long
个实例的缓存。来自Long.valueOf(..)
的文档:
如果不需要新的Long实例,通常应优先使用此方法,而不是构造函数Long(long),因为此方法可能通过缓存频繁请求的值来显着提高空间和时间性能。
答案 1 :(得分:2)
答案 2 :(得分:2)
另一种方法是利用自动装箱:
queryParms.add(empRec);
但是我会问你的老板他为什么对你大吼大叫。这似乎不是一种让人感到困惑的事情。也许他的大写锁定钥匙坏了? :P
答案 3 :(得分:1)
使用自动装箱可以节省您的输入,正如其他答案所提到的那样;然而,使用自动装箱与你的方式相比,它具有相同的性能;区别仅在于可读性。
如果您想将数字存储在列表中,并且您不知道自己需要多少,这是一个很好的方法。它易于阅读,更复杂的代码片段更容易出错。
如果您确切知道要存储的项目数量,可以创建一个long[]
并将数字放在那里。您无需为每个元素创建/获取Long
个对象。
但是,在将您编写的代码更改为更复杂的代码之前,例如long[]
或其他内容,请注意大多数代码不会影响整体应用程序性能。例如。在一个用户请求中,如果您正在进行一些数据库工作,读取/写入一些文件,进行一些网络活动,并将10个数字写入List<Long>
,那么请求的性能将由其他因素决定,这将比创建列表花费1000倍或更多的时间。如果性能是一个问题,那么优化总时间不到1000的东西将不会对整个请求所花费的时间产生任何明显的差异。