创建基元 int 的 List?

有没有一种方法来创建一个基元整型或任何基元的列表,在 Java 中如下?

List<int> myList = new ArrayList<int>();

看来我能做 List myList = new ArrayList();

并添加“ int”到这个列表中。但是这意味着我可以添加任何内容到这个列表中。

我唯一的选择是创建一个 int 数组并将其转换为一个列表还是创建一个 Integer 对象列表?

312559 次浏览

在 Java 中,任何变量的类型都是基元类型或引用类型。泛型类型参数必须是引用类型。由于原语不扩展 Object,因此它们不能用作参数化类型的泛型类型参数。

而是使用 Integer类,它是 int的包装器:

List<Integer> list = new ArrayList<Integer>();

如果您使用 Java7,您可以使用菱形运算符简化这个声明:

List<Integer> list = new ArrayList<>();

在 Java 中使用自动装箱时,基元类型 int将在必要时变成 Integer

自动装箱是 Java 编译器进行的自动转换 在基元类型及其对应的对象包装器之间 课程。

因此,以下内容是有效的:

int myInt = 1;
List<Integer> list = new ArrayList<Integer>();
list.add(myInt);


System.out.println(list.get(0)); //prints 1

这不可能。Java 规范禁止在泛型中使用原语。但是,由于装箱,如果 i是整型,则可以创建 ArrayList<Integer>并调用 add(i)

集合使用支持 引用类型或通配符的泛型

List<Integer> list = new ArrayList<>();

有没有办法在 java 中创建一个原语 int 或任何原语的列表

不可以。您只能创建引用类型的 List,如 IntegerString或您的自定义类型。

看起来我可以做 List myList = new ArrayList();并添加“ int”到这个列表中。

int添加到此列表时,它将自动装箱为 Integer包装类型。但是在较新的代码中使用 生的类型列表或任何泛型类型都不是一个好主意。

我可以把任何东西加进去。

当然,这是使用原始类型的缺点。你可以有 凯特老虎恐龙,所有在一个容器。

是我唯一的选择,创建一个 int 数组并将其转换为列表

在这种情况下,您只能得到一个 List<Integer>。您无法创建 List<int>或任何原语。

反正你也不该被打扰。甚至在 List<Integer>中也可以添加 int基元类型。它将自动装箱,如下例所示:

List<Integer> list = new ArrayList<Integer>();
list.add(5);

当使用 JavaCollectionFramework 时,没有任何集合可以包含基元类型。

但是,还有其他支持基本类型的 java 集合,例如: 宝藏柯尔特Fastutil番石榴

当使用 Trove Library 时,带 int 的数组列表如下所示:

 TIntArrayList list= new TIntArrayList();

与来自 Java 集合的 Integer 的 ArrayList 相比,这个列表的性能要好得多,因为不需要自动装箱/解箱到相应的 Integer Wrapper 类。

Java 集合应该只是 Object 的集合。

List<Integer> integerList = new ArrayList<Integer>();

Integer 是基元数据类型 int 的包装类。

更多来自 JAVA 包装类 这里!

U 可以直接保存整型列表并从整型列表获取 int, integerList.add(intValue); int intValue = integerList.get(i)

尝试使用 apache 框架中的 ArrayIntList,它的工作方式与数组列表完全相同,除了它可以保存原始 int。

更多详情请浏览此网页-

Https://commons.apache.org/dormant/commons-primitives/apidocs/org/apache/commons/collections/primitives/arrayintlist.html

有没有办法把 Integer []数组转换成 int []数组?

Java 核心库中的这一重大遗漏似乎出现在我从事的几乎每一个项目中。尽管 Trove 库可能很方便,但是我无法解析一个静态链接 LGPL 库的 Android 应用程序满足 LPGL 的确切需求(前言说的没错,但是主体似乎不是这么说的)。而且很明显,通过剥离 Apache 源代码来获得这些类是非常不方便的。肯定有更好的办法。

在 Android 开发中使用 Java 时,建议使用 SparseIntArray来防止 intInteger之间的自动装箱。

您可以在 Android 开发者文档中找到更多关于 SparseIntArray的信息,并且可以很好地解释 Android 在这里输入链接描述上的自动装箱

可以使用 Eclipse 集合中提供的原语集合。Eclipse 集合具有针对所有原语的 ListSetBagMap。原语集合中的元素维护为原语,不进行装箱。

您可以像下面这样初始化 IntList:

MutableIntList ints = IntLists.mutable.empty();

你可以像这样把 List<Integer>转换成 IntList:

List<Integer> integers = new ArrayList<>();
MutableIntList ints = ListAdapter.adapt(integers).collectInt(each -> each);

注意: 我是 Eclipse 集合的贡献者。

来自瓦尔哈拉项目的 JEP 402 ,承诺允许这样做。它们将完全消除对包装类的需要,这意味着不再需要装箱和拆箱。

所以小心点

如果您有一个基本整数数组,您可以使用 java 流将其转换为一个列表。

List<Integer> lst = Arrays.stream(arr).boxed().collect(Collectors.toList());

当从 list 中读取值时,可以使用 intValue()将其作为原语 int 获取

lst.get(0).intValue();