Java ArrayList是否支持稀疏指示?

时间:2015-08-21 23:04:55

标签: java arraylist hashmap

标题几乎说明了一切。我很难找到相关的信息,所以我做了一些试验和错误,我想我会在这里分享我的结果。

来自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

2 个答案:

答案 0 :(得分:2)

没有。 Java ArrayList(根据Javadoc)

  

此类提供了操作内部用于存储列表的数组大小的方法。

并按JLS-10.3. Array Creation

  

数组创建表达式指定至少一个嵌套级别的元素类型,嵌套数组的级别数和数组的长度。数组的长度可用作final实例变量length

在Java中,人们通常会使用Map(例如HashMap或可能LinkedHashMap)实现稀疏Collection

答案 1 :(得分:1)

  

Java ArrayList是否支持稀疏索引?

没有

javadoc说:

  

每个ArrayList实例都有容量。容量是用于存储列表中元素的数组的大小。它始终至少与列表大小一样大。

始终

如果它总是(至少)与大小一样大,那么根据定义,它不是稀疏的。