arraylist如何用Java表示未知大小元素的已知大小集?
所以我有256个元素(长度未知的列表),我想用Java来表示它们。 在c++中,我会使用如下内容:
vector<int> aList[255];//This is C++ example
在Java中,我尝试使用:
ArrayList<Integer>[] aList = new ArrayList<Integer>[256];
但是Java编译器禁止“通用数组创建”
我还尝试使用:
ArrayList<ArrayList<Integer>> bList = new ArrayList<>(256);
但当我这么做的时候
bList.get(67) //or any other value
我得到了一个索引越界异常(bList大小为0),所以我的问题是如何最好地表示这样的数据,还是应该用空值(本例中为256个空值)填充bList
编辑:好的,根据答案,我想我会使用解决方案
ArrayList<ArrayList<Integer>> bList = new ArrayList<>(256);
然后用new ArrayLiist()
填充外部数组,因为我需要按不知道的顺序对它进行迭代
# 1 楼答案
不能像那样实例化泛型类型的数组。最好的选择是2D阵列:
如果需要使用
List<Integer>[]
,则可以通过创建自己的非泛型子类来规避限制:只需注意,使用此选项无法将
new ArrayList<Integer>()
添加到aList
(数组存储异常),因此必须创建new IntList()
对象# 2 楼答案
列表是可调整大小的数组。你不必(但你可以)声明初始大小——它们会根据需要增长,只需添加元素即可
既然你已经在C++中使用了数组,你可以在java EG/<
然后像^{一样访问它
至于列表,您必须首先初始化它们(也称为添加元素),因为它们会跟踪您添加到它们中的内容。要做到这一点,你可以
然后是myList。get(67)
将返回
null
,但不会引发异常所有这些都适用于二维数组和列表
# 3 楼答案
大小真的是未知的,还是随意的,动态的
Set
(不同,无序)或List
(有序, 不可分辨)或Deque
(有序,双端堆栈) 操作)李>Iterable
(可以产生有限的或非有限的Iterator
循环 或者将其公开为Stream
(也可以是 有限/非有限)李># 4 楼答案
Java中的列表与数组不同。把列表想象成一系列元素(没有间隙!)。
ArrayList
只是列表的一个实现。尽管它使用数组在内部存储其元素,但它的行为仍必须与任何其他列表(例如aLinkedList
)一样Java列表(所以即使它是
ArrayList
)也会跟踪已经添加了多少元素。所以,即使创建这样的列表:List<List<Integer>> list = new ArrayList<>(256);
,它仍然知道此时它是空的,所以访问第67个元素失败如果这样的行为不适合您,那么您不应该在这里使用列表,您可以简单地使用数组而不是
ArrayList
# 5 楼答案
数组列表是一个可自行调整大小的数组。因此,它有两个重要的内在价值。容量(分配的内部数组的大小)和大小(元素的实际数量)。从文件中:
对于您的情况,这意味着您正在分配一个ArrayList,它允许在不调整大小的情况下添加255个元素。这并不意味着你可以访问这些索引中的任何一个
因此,必须首先像这样初始化值:
这实际上是在创建数组列表