我想知道如何初始化一个具有无限数量预定义值的 ArrayList,以便我可以访问任意索引的元素并更新其值。
例如,ArrayList testArrayList
将以所有 int
值 0
启动,我可以立即使用 testArrayList.set( 123, 15)
将 ArrayList 中的第 124 个元素设置为 15
,而不是获取越界异常。当我执行诸如 testArrayList.get(99999)
之类的查询时,我将获得预定义值 0
。
我一直在尝试首先初始化一个 ArrayList,然后使用 for 循环向其添加 0
,但我必须决定初始 ArrayList 应该有多大。如果我创建了一个 ArrayList,然后立即向其中添加 100 个 0
,那么在添加另一数量的 0 之前,我无法对其执行
s。.get(200)
我正在寻找的东西可以用ArrayList实现吗?如果没有,您会推荐一些替代解决方案吗?
谢谢。
编辑:我想要一个列表的原因是我希望能够按顺序迭代它。我正在制作一个简单的类似日历的程序,我可以在其中添加/检索/修改任意“日期”的“注释”,而且还能够打印给定特定时间段的每个“天”的注释。
最佳答案
您不想创建 ArrayList
,因为为了填充 99999
第一个索引,您必须填充索引 0
至99998
首先,这是浪费。
一个HashMap<Integer,Integer>
是一个更好的选择,因为您只填充您关心的索引。
一个HashMap
与 Integer
key 可以被认为是将“稀疏 ArrayList”的索引映射到一个小数组中,这减少了存储需求,同时保持预期的插入和查找时间不变。
例如:
Map<Integer,Integer> map = new HashMap<>();
int value = map.getOrDefault(99999,0); // this will return 0 if the Map has no value
// for the key 99999
map.put (99999, value + 1);
编辑:看到您对迭代顺序的要求,您可以使用 TreeMap<Integer,Integer>
而不是HashMap<Integer,Integer>
。这样,迭代键将始终按照它们的数字顺序进行。
关于java - 具有无限预定义值的 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45691789/