创build一个原始的int列表?
有没有一种方法来创build一个原始的int列表或Java中的任何原语像下面一样?
List<int> myList = new ArrayList<int>();
看来我可以做List myList = new ArrayList();
并在此列表中添加“int”。 但是这意味着我可以添加任何东西到这个列表中。
是我唯一的select,创build一个int数组,并将其转换为列表或创build一个Integer对象列表?
在Java中,genericstypes参数必须是对象。 由于原语不扩展Object
,因此不能将其用作参数化types的genericstypes参数。
而是使用Integer
类,它是int
的包装器:
List<Integer> list = new ArrayList<Integer>();
如果您使用Java 7,则可以使用钻石算子来简化此声明:
List<Integer> list = new ArrayList<>();
在Java中自动装箱时,原始typesint
将在必要时变为Integer
。
自动装箱是Java编译器在基元types和相应的对象包装类之间进行的自动转换。
所以下面是有效的:
int myInt = 1; List<Integer> list = new ArrayList<Integer>(); list.add(myInt); System.out.println(list.get(0)); //prints 1
不,在使用Java集合框架时,没有任何集合可以包含基本types。
但是,还有其他一些支持原始types的java集合,比如: Trove , Colt , Fastutil , Guava
使用Trove Library时,如何使用整数列表的例子如下:
TIntArrayList list= new TIntArrayList();
该列表的性能与来自Java集合的整数的ArrayList相比要好得多,因为不需要对相应的整数包装类进行自动装箱/拆箱。
有没有办法在java中创build一个基本int或任何原语的列表
不,你不能。 您只能创build引用types列表,如Integer
, String
或您的自定义types。
看来我可以做
List myList = new ArrayList();
并在此列表中添加“int”。
将int
添加到此列表时,会自动将其填充为Integer
包装types。 但是在新的代码中使用原始types列表或任何genericstypes是一个坏主意。
我可以添加任何东西到这个列表中。
当然,这是使用原始types的不利条件。 你可以把猫 , 狗 , 老虎 , 恐龙 ,都放在一个容器里。
是我唯一的select,创build一个int数组并将其转换为一个列表
在这种情况下,您将只获得一个List<Integer>
。 您无法创buildList<int>
或任何原语。
反正你不应该被打扰。 即使在List<Integer>
您也可以添加一个int
基本types。 它将被自动装箱,如下例所示:
List<Integer> list = new ArrayList<Integer>(); list.add(5);
尝试使用apache框架中的ArrayIntList。 它的工作方式与arraylist完全相同,只是它可以保存原始的int。
更多细节在这里 –
您可以使用Eclipse集合中提供的原始集合。 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规范禁止在generics中使用原语。 但是,你可以创buildArrayList<Integer>
并且如果i
是一个int,那么调用add(i)
,这要归功于装箱。
集合使用支持引用types或wilcards的generics。 但是,您可以使用Integer
包装器
List<Integer> list = new ArrayList<>();
当您使用Java进行Android开发时,build议使用SparseIntArray
来防止int
和Integer
之间的自动装箱。
您可以在Android Developers文档中find更多信息到SparseIntArray
,并在Android上自动装箱的一个很好的解释在这里input链接描述
有没有办法将Integer []数组转换为int []数组?
Java核心库中的这个重大遗漏似乎在我所做过的每一个项目上都出现了。 就像Trove库一样方便,我无法parsing一个精确的需求来满足一个Android应用程序的LPGL,这个应用程序可以静态链接一个LGPL库(前言说的没问题,主体看起来好像不一样)。 只是简单的不方便的去撕裂Apache源来获得这些类。 必须有更好的方法。
Java集合应该只是Object的集合。
List<int> intList = new ArrayList<int>();
和…一样
List<Integer> integerList = new ArrayList<Integer>();
整数是基本数据types为int的包装类。
更多来自这里的 JAVA包装类!
U可以直接保存并从整数列表中获取int int integerList.add(intValue);
int intValue = integerList.get(i)