[英]Large array of 'int' type needs to be passed to a generic array & collections
我正在從函數生成一個具有int
類型的元素的大型數組(大小> 1000)。 我需要將此數組傳遞給泛型類型數組,但是由於泛型類型數組不接受原始類型的數組,因此我無法這樣做。
我擔心使用Integer
類型的數組,因為這樣做對於大型數組而言,在創建,性能,所使用的空間(12個字節對象的數組)方面會非常昂貴。 當我需要對數組元素執行一些加法運算時,還會創建不可變的Integer
。
最好的搭配方式是什么?
編輯只是為了消除周圍的一些混亂,我需要將int []傳遞給簽名類型的方法: void setKeys(K... keys)
。
如果您的陣列數量在1000(甚至10,000或100,000)個元素的數量級上,那么除非您對每個陣列進行數千次處理,否則在內存和性能方面的成本差異可能不會很明顯。 使用Integer編寫代碼,並在以后遇到性能問題時進行優化。
我想將
int[]
傳遞給此函數:public Query<K> setKeys(K... keys);
我假設您的意思是int[]
應該是鍵的集合,而不僅僅是一個鍵。
那是不可能的。 泛型類型的類型參數必須是引用類型。 您的用例要求K
為int
。
您有兩種選擇:
Integer
(或可變的int
持有者類)並支付性能罰款,或者 順便說一下, Integer
類為較小的int
值保留了Integer
對象的緩存。 如果使用Integer.valueOf(int)
創建對象,則很有可能會獲得對預先存在的對象的引用。 (當然,這僅適用於Integer
對象是不可變的。)
如果你關心性能,你可以寫一個簡單的類,包裝了一個公共int
,因此這意味着你可以讓你的電話,仍然需要發生變異它。 話雖如此,我確實同意您要絕對確保在進行此性能改進之前需要這樣做。
如果你其實不必擔心裝箱/拆箱整數性能影響,您可以考慮GNU特羅韋 ,特別是他們TIntArrayList
。 它使您可以在被原語支持的同時模仿ArrayList<Integer>
的功能。 就是說,我不確定您是否需要這個,也不確定這正是您所要的。
如果您不希望將整數永久裝箱,則可以從Google Collections庫( http://guava-libraries.googlecode.com/svn/tags/release08/javadoc/com中Ints.asList()
的結果/google/common/primitives/Ints.html#asList(int ...) ),它是數組支持的List<Integer>
。 這些值將在被訪問時被裝箱,因此,僅當未多次訪問這些值時,這才有意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.