我使用以下方法将int
中的ResultSet
值放入int数组中。这似乎非常有效但我无法弄清楚如何获得一个原始int
的数组,我不知道它的大小。
List<Integer> ints = ArrayList<Integer>();
while ( results.next ) ints.add( results.getInt( "id" );
int[] intsArray = new int[ ints.size() ];
for ( int i = 0; i < ints.length; i++ ) int[ i ] = ints.get( i ); //auto-boxes here
我需要这些是原始数组,因为这是方法所需要的。
答案 0 :(得分:2)
如果您不知道从结果集中读取的值的数量,您实际上无法避免使用列表。
但如果您有一个列表类可以存储原始List<Integer>
值,例如trove project的int
,则可以避免使用TIntList
。
最后,您应该真正衡量使用中间Integer
对象对性能的影响,然后才能在这个问题上花费太多精力。
答案 1 :(得分:0)
ArrayList
转换为数组您必须猜测初始大小,然后在填充其最后一个元素时调整数组大小,并在完成结果集时根据需要重复。
此行为正是ArrayList
已经为您提供的行为。但已经调试过。 ; - )
所以只需使用ArrayList<Integer>
即可。最后转换为数组。
您可能会考虑使用Collection::toArray
。但该实用程序只能返回一个对象数组,而不是基元。
请参阅this Question,了解转换为基元数组的几种好方法。
我的选择是呼叫Google Guava。虽然为此目的添加Guava可能有点过分,但Guava非常有用,因此我默认将库添加到大多数新的Java项目中。
List< Integer > list = ... ;
int[] values = Ints.toArray( list ) ;
如果您的部署环境对内存非常紧张,或者您有非常多的元素,或者您经常执行此操作以影响性能,那么我才会采用填充和调整大小的方式数组int
手动自己。