Java 创建一个基元int的列表?
有没有一种方法可以像下面这样在java中创建一个基元int或任何基元的列表Java 创建一个基元int的列表?,java,list,generics,collections,Java,List,Generics,Collections,有没有一种方法可以像下面这样在java中创建一个基元int或任何基元的列表 List<int> myList = new ArrayList<int>(); List myList=new ArrayList(); 似乎我可以做List myList=new ArrayList() 并将“int”添加到此列表中。但这意味着我可以在列表中添加任何内容 我唯一的选择是创建int数组并将其转换为列表还是创建整数对象列表 在Java中,任何变量的类型都是基元类型或引用类型。泛
List<int> myList = new ArrayList<int>();
List myList=new ArrayList();
似乎我可以做List myList=new ArrayList()代码>
并将“int”添加到此列表中。但这意味着我可以在列表中添加任何内容
我唯一的选择是创建int数组并将其转换为列表还是创建整数对象列表 在Java中,任何变量的类型都是基元类型或引用类型。泛型类型参数必须是引用类型。由于原语不扩展对象
,因此它们不能用作参数化类型的泛型类型参数
而是使用Integer
类,它是int
的包装器:
List<Integer> list = new ArrayList<Integer>();
这是不可能的。java规范禁止在泛型中使用原语。但是,由于装箱,如果i
是int,则可以创建ArrayList
并调用add(i)
。集合使用支持或wilcards的泛型。但是,您可以使用整数
包装器
List<Integer> list = new ArrayList<>();
List List=new ArrayList();
有没有办法在java中创建一个基元int或任何基元的列表
不,你不能。您只能创建引用类型列表,如Integer
、String
,或自定义类型
似乎我可以做List myList=new ArrayList()编码>并将“int”添加到此列表中
当您将int
添加到此列表时,它将自动装箱为Integer
包装类型。但在较新的代码中使用原始类型列表或任何泛型类型都不是一个好主意
我可以在这个列表中添加任何内容
当然,这是使用原始类型的缺点。你可以把猫、狗、老虎、恐龙都放在一个容器里
是我唯一的选择,创建int数组并将其转换为列表
在这种情况下,您将只得到一个列表
。您无法创建列表
或任何原语
你无论如何都不应该被打扰。即使在列表中
也可以添加int
基本类型。它将自动装箱,如下例所示:
List<Integer> list = new ArrayList<Integer>();
list.add(5);
List List=new ArrayList();
增加(5);
不,在使用Java集合框架时,没有任何集合可以包含基元类型
但是,还有其他支持基元类型的java集合,例如:
使用Trove库时,带int的arraylist的示例如下:
TIntArrayList list= new TIntArrayList();
与Java集合中整数的ArrayList相比,此列表的性能要好得多,因为不需要自动装箱/取消装箱到相应的整数包装类。Java集合应仅为对象集合
List<Integer> integerList = new ArrayList<Integer>();
List integerList=new ArrayList();
Integer是原始数据类型int的包装类。
来自JAVA包装器类的更多信息
!
U可以直接将int保存到integerList并从integerList获取int,如下所示:,
integerList.add(intValue)代码>
int intValue=integerList.get(i)
尝试使用apache框架中的ArrayIntList。它的工作原理与arraylist完全相同,只是它可以保存原语int
这里有更多细节-
有没有办法将整型[]数组转换为整型[]数组
Java核心库中的这一重大遗漏似乎出现在我所从事的几乎每个项目中。尽管Trove库可能很方便,但对于静态链接LGPL库的Android应用程序,我无法解析满足LPGL的精确要求(序言说可以,正文似乎没有这么说)。为了得到这些类,去翻录和剥离Apache源代码是很不方便的。必须有更好的方法。当您使用Java进行Android开发时,建议使用SparseIntArray
来防止int
和Integer
之间的自动装箱
您可以在中找到有关SparseIntArray的详细信息,以及Android上自动装箱的详细说明。您可以使用中提供的原始集合。Eclipse集合对所有原语都有列表
、集合
、包
和映射
。基本体集合中的元素作为基本体进行维护,不会发生装箱
您可以按如下方式初始化:
MutableIntList ints = IntLists.mutable.empty();
List<Integer> integers = new ArrayList<>();
MutableIntList ints = ListAdapter.adapt(integers).collectInt(each -> each);
您可以将列表
转换为IntList
,如下所示:
MutableIntList ints = IntLists.mutable.empty();
List<Integer> integers = new ArrayList<>();
MutableIntList ints = ListAdapter.adapt(integers).collectInt(each -> each);
List integers=new ArrayList();
MutableIntList ints=ListAdapter.adapt(整数).collectInt(每个->每个);
注意:我是Eclipse集合的贡献者。关于原始类型的讨论很好。事实上,为了清楚起见,您可以只使用基本数组创建包含基本类型的列表。int[]数组=新的int[10]@但这不会动态增加列表。这是一个数组。我假设OP已经知道了这一点。如果性能是您关心的问题,trove应该会有所帮助。可以使用基本数组创建列表,但您必须首先知道数组的大小,并且您将丢失Collections对象附带的许多其他功能。但是您可以做如下操作:int[]array=newint[10];long需要8字节,long需要8字节加16字节作为对象头(在64位系统中)。很遗憾,没有原始列表。大型数据集应始终作为原语保存……我在Guava中找不到原语集合实现。你能提供一个链接吗?第一行无法编译,最后两行代码到处都是。请不要这样做,这是一个强有力的声明。当然,SparseIntArray
通常是一个更好的选择,但是需要注意一些权衡。“该实施不适用于可能包含大量ite的数据结构