java - 具有无限预定义值的 ArrayList

标签 java loops arraylist data-structures

我想知道如何初始化一个具有无限数量预定义值的 ArrayList,以便我可以访问任意索引的元素并更新其值。

例如,ArrayList testArrayList 将以所有 int0 启动,我可以立即使用 testArrayList.set( 123, 15) 将 ArrayList 中的第 124 个元素设置为 15,而不是获取越界异常。当我执行诸如 testArrayList.get(99999) 之类的查询时,我将获得预定义值 0

我一直在尝试首先初始化一个 ArrayList,然后使用 for 循环向其添加 0,但我必须决定初始 ArrayList 应该有多大。如果我创建了一个 ArrayList,然后立即向其中添加 100 个 0,那么在添加另一数量的 0 之前,我无法对其执行 .get(200) s。

我正在寻找的东西可以用ArrayList实现吗?如果没有,您会推荐一些替代解决方案吗?

谢谢。

编辑:我想要一个列表的原因是我希望能够按顺序迭代它。我正在制作一个简单的类似日历的程序,我可以在其中添加/检索/修改任意“日期”的“注释”,而且还能够打印给定特定时间段的每个“天”的注释。

最佳答案

您不想创建 ArrayList ,因为为了填充 99999第一个索引,您必须填充索引 099998首先,这是浪费。

一个HashMap<Integer,Integer>是一个更好的选择,因为您只填充您关心的索引。

一个HashMapInteger 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/

相关文章:

java - Docker compose mysql 容器在依赖它的应用程序之后运行

JAVA初学者求助需要在循环中输入字符串

c++ - "while (c = getchar())"等价于 C++

java - java中如何定义类之间的关系?

JavaSE-1.6 和 Java 兼容性

java - 终止实例永远不会返回终止状态 aws sdk

java - 仅使用 Socket 类在 Java 中编写 HTTP 代理

java - 通过将对象的属性/属性与字符串进行比较来检查对象列表是否已存在

java,我的 arrayList 遇到问题

java - 使用索引迭代 arraylist 中的项目