有没有一种方法可以创建基本类型int或Java中任何基本类型的列表,如下所示?
List<int> myList = new ArrayList<int>();
看来我能做到 List myList = new ArrayList();
并将“ int”添加到此列表中。但这意味着我可以在此列表中添加任何内容。
我唯一的选择是创建一个int数组并将其转换为一个列表或创建一个Integer对象的列表吗?
有没有一种方法可以创建基本类型int或Java中任何基本类型的列表,如下所示?
List<int> myList = new ArrayList<int>();
看来我能做到 List myList = new ArrayList();
并将“ int”添加到此列表中。但这意味着我可以在此列表中添加任何内容。
我唯一的选择是创建一个int数组并将其转换为一个列表或创建一个Integer对象的列表吗?
Answers:
在Java中,任何变量的类型都是原始类型或引用类型。泛型类型参数必须是引用类型。由于基元不扩展,Object
因此它们不能用作参数化类型的泛型类型参数。
而是使用Integer
作为包装器的类int
:
List<Integer> list = new ArrayList<Integer>();
如果您使用的是Java 7,则可以使用菱形运算符简化此声明:
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中创建基本类型int或任何基本类型的列表
不,你不能。您只能创建引用类型,喜欢的列表Integer
,String
或您的自定义类型。
看来我可以做,
List myList = new ArrayList();
并在此列表中添加“ int”。
当您添加int
到此列表时,它会自动装箱为Integer
包装类型。但是在更新的代码中使用原始类型列表或任何通用类型是一个坏主意。
我可以在此列表中添加任何内容。
当然,那是使用原始类型的缺点。你可以有猫,狗,Tiger,Dinosaur放在一个容器中。
是我唯一的选择,创建一个int数组并将其转换为列表
在这种情况下,您也只会得到一个List<Integer>
。您无法创建List<int>
任何方法或任何原语。
无论如何您都不会打扰。即使List<Integer>
您可以添加int
原始类型。它将自动装箱,如以下示例所示:
List<Integer> list = new ArrayList<Integer>();
list.add(5);
尝试使用apache框架中的ArrayIntList。除了可以保存基本int之外,它的工作原理与arraylist完全相同。
此处有更多详细信息-
您可以使用Eclipse Collections中可用的原始集合。Eclipse的集合有List
,Set
,Bag
和Map
所有的原语。图元集合中的元素被保留为图元,并且不进行装箱。
您可以像这样初始化一个IntList:
MutableIntList ints = IntLists.mutable.empty();
您可以从一个转换List<Integer>
到IntList
这样的:
List<Integer> integers = new ArrayList<>();
MutableIntList ints = ListAdapter.adapt(integers).collectInt(each -> each);
注意:我是Eclipse Collections的撰稿人。
当您使用Java进行Android开发时,建议使用SparseIntArray
来防止int
和之间的自动装箱Integer
。
您可以SparseIntArray
在Android Developers文档中找到更多信息,并在Android上对自动装箱进行了很好的解释,请在此处输入链接描述
SparseIntArray
,通常这是一个更好的选择,但是要权衡一些注意事项。“该实现不适用于可能包含大量项目的数据结构。它通常比传统的HashMap慢...”