Java 大量的';int';类型需要传递给泛型数组&;收藏

Java 大量的';int';类型需要传递给泛型数组&;收藏,java,arrays,generics,int,primitive-types,Java,Arrays,Generics,Int,Primitive Types,我正在从一个函数生成一个包含int类型元素的大型数组(大小>1000)。我需要将此数组传递给泛型类型数组,但由于泛型类型数组不接受基元类型的数组,因此我无法这样做 我担心使用整数类型的数组,因为在创建、性能和使用的空间(12字节对象数组)方面,对大尺寸数组执行此操作时成本高昂。此外,当我需要对数组元素执行一些加法操作时,它将创建不可变的整数 最好的搭配方式是什么 编辑为了消除一些混淆,我需要将int[]传递给签名类型的方法:无效设置键(K…键)如果数组的元素数量大约为1000个(甚至10000或

我正在从一个函数生成一个包含
int
类型元素的大型数组(大小>1000)。我需要将此数组传递给泛型类型数组,但由于泛型类型数组不接受基元类型的数组,因此我无法这样做

我担心使用
整数
类型的数组,因为在创建、性能和使用的空间(12字节对象数组)方面,对大尺寸数组执行此操作时成本高昂。此外,当我需要对数组元素执行一些加法操作时,它将创建不可变的
整数

最好的搭配方式是什么


编辑为了消除一些混淆,我需要将int[]传递给签名类型的方法:
无效设置键(K…键)

如果数组的元素数量大约为1000个(甚至10000或100000个),在内存和性能方面的成本差异可能不会明显,除非您对每个阵列进行数千次处理。使用Integer编写代码,如果出现性能问题,请稍后进行优化

如果您的阵列大约有1000个(甚至10000或100000个)元素,那么内存和性能方面的成本差异可能不会明显,除非您对每个阵列进行数千次处理。使用Integer编写代码,如果出现性能问题,请稍后进行优化

如果您非常关心性能,您可以编写一个简单的类来包装public
int
,这意味着您可以根据需要进行调用并对其进行修改。话虽如此,我确实同意您希望在执行此操作之前绝对确保您需要此性能改进。

如果您非常关心性能,您可以编写一个简单的类来包装public
int
,这意味着您可以进行调用,并且仍然可以根据需要对其进行修改。话虽如此,但我确实同意,在做这件事之前,你必须绝对确定你需要提高性能。

如果你真的需要担心装箱/解包整数的性能含义,你可以考虑,特别是他们的<代码> TIntArrayList < /代码>。它允许您模拟
ArrayList
的功能,同时支持原语。也就是说,我不确定你需要这个,我不确定这正是你正在寻找的。

如果你真的需要担心装箱/解包整数的性能含义,你可以考虑,特别是他们的<代码> TIntArrayList < /代码>。它允许您模拟

ArrayList
的功能,同时支持原语。也就是说,我不确定你是否需要这个,我也不确定这正是你想要的


我想向这个函数传递一个
int[]
公共查询设置键(K…键)

我假设您的意思是
int[]
应该是一组键。。。不仅仅是一把钥匙

这是不可能的。泛型类型的类型参数必须是引用类型。您的用例要求
K
成为
int

你有两个选择:

  • 使用
    Integer
    (或可变
    int
    holder类)并支付性能罚款,或
  • 放弃使用泛型并更改该方法的签名

顺便提一下,
Integer
类为较小的
int
值保留了
Integer
对象的缓存。如果使用
Integer.valueOf(int)
创建对象,很有可能获得对预先存在的对象的引用。(当然,这只是因为
Integer
对象是不可变的。)


我想向这个函数传递一个
int[]
公共查询设置键(K…键)

我假设您的意思是
int[]
应该是一组键。。。不仅仅是一把钥匙

这是不可能的。泛型类型的类型参数必须是引用类型。您的用例要求
K
成为
int

你有两个选择:

  • 使用
    Integer
    (或可变
    int
    holder类)并支付性能罚款,或
  • 放弃使用泛型并更改该方法的签名


顺便提一下,
Integer
类为较小的
int
值保留了
Integer
对象的缓存。如果使用
Integer.valueOf(int)
创建对象,很有可能获得对预先存在的对象的引用。(当然,这仅仅是因为
Integer
对象是不可变的。)

如果不想将整数永久装箱,可以从Google Collections library()传入
Ints.asList()
的结果,这将是一个由数组支持的
列表。值在被访问时会被装箱,因此只有在值没有被多次访问的情况下,这才有意义。

如果不想永久装箱整数,可以从Google Collections library()传入
Ints.asList()
的结果,这将是一个由数组支持的
列表。值在被访问时会被装箱,因此只有在值没有被多次访问的情况下,这才有意义。

@Marcos你能给出一些示例代码来说明你想做什么吗?我认为他有一个类似public void processArray(T[]T)的方法,但不能使用int,当然。我想知道更多关于你传递给谁的信息。如果像MeBigFatGuy的例子,你就被卡住了。但是,您正在调用的API可能需要一个Iterable或迭代器——如果是这样的话,您可以在int[]的基础上实现它,而不需要同时具体化所有整数。或者你可以通过你的阵列