标题几乎说明了一切。我很难找到相关的信息,所以我做了一些试验和错误,我想我会在这里分享我的结果。
来自PHP背景,我期望Java的ArrayList
类型支持稀疏指标。例如,在PHP中我可以这样做:
$test = array(
"Item 1",
"Item 2",
"Item 3"
);
unset($test[1]);
echo $test[2];
获得"项目3"背部。但是,当我在Java中尝试类似的东西时:
ArrayList<String> test = new ArrayList<>();
test.add("Item 1");
test.add("Item 2");
test.add("Item 3");
test.remove(1);
System.out.println(test.get(2));
我得到IndexOutOfBoundsException
。看起来当你删除元素时,数组会重新编入索引。也许我错过了一些东西(我对Java很陌生),但在我看来,如果你依赖于知道一个索引不会改变,如果元素被删除,你应该使用{{ {1}}代替HashMap
。
答案 0 :(得分:2)
没有。 Java ArrayList
(根据Javadoc)
此类提供了操作内部用于存储列表的数组大小的方法。
数组创建表达式指定至少一个嵌套级别的元素类型,嵌套数组的级别数和数组的长度。数组的长度可用作
final
实例变量length
。
在Java中,人们通常会使用Map
(例如HashMap
或可能LinkedHashMap
)实现稀疏Collection
。
答案 1 :(得分:1)
Java ArrayList是否支持稀疏索引?
没有
javadoc说:
每个
ArrayList
实例都有容量。容量是用于存储列表中元素的数组的大小。它始终至少与列表大小一样大。
始终
如果它总是(至少)与大小一样大,那么根据定义,它不是稀疏的。