Cra*_*tis 7 java arrays collections casting
如果您有一个Collection的实例,请说:
Collection<String> addresses = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)
然后用一堆值填充哪些值,这是"最好的"方式,如果有的话,使用toArray()方法而不需要类型转换?
String[] addressesArray = addresses.toArray(new String[] {});
String[] addressesArray = addresses.toArray(new String[0]);
String[] addressesArray = addresses.toArray(new String[addresses.size()]);
String[] addressesArray = addresses.toArray(new String[addresses.size() + 5]);
Run Code Online (Sandbox Code Playgroud)
前两个之间是否存在语义差异?第三是最有效的吗?第四个效率低于第三个吗?
为了我的钱
String[] addressesArray = addresses.toArray(new String[0]);
Run Code Online (Sandbox Code Playgroud)
是最简单的,最不容易出错,因此"最好".它还具有以下优点:相同的代码适用于并发/同步集合.您必须使用一些非常低级别,频繁使用的代码才能获得可忽略的性能差异,从而产生任何差异.
通常,您会看到分配给a的空数组,static final以避免在每次执行时分配.显然,事实证明,由于"优化"(分配确实非常快),性能可能会下降.
更新:结果显示这比使用大小的数组更快.http://shipilev.net/blog/2016/arrays-wisdom-ancients/ tl; dr:反射是一种微不足道的类型,不涉及慢速方法查找,如果可以确定全部,则可以删除数组的归零将写入元素(或数组变得无法访问).
根据findbugs的报告,这是最有效的:
String[] addressesArray = addresses.toArray(new String[addresses.size()]);
Run Code Online (Sandbox Code Playgroud)
我相信他们;)
| 归档时间: |
|
| 查看次数: |
2936 次 |
| 最近记录: |