【问题标题】:JavaScript style array filling in JavaJava 中的 JavaScript 样式数组填充
【发布时间】:2015-02-03 22:27:01
【问题描述】:

在 JavaScript 中,如下:

var a = [];
a[20] = "hello";
console.log(JSON.stringify(a));

会产生:

[null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,"hello"]

Java 中是否有一个列表类型会在设置值超出当前范围时自动扩展?地图不实用,因为我还需要知道数组维度。

【问题讨论】:

  • 试试 ArrayList 类,存在于 java.utils 包中
  • @Sarthak Mittal - ArrayList 不会自动填充。您不能将元素设置在末尾。
  • @jalynn2 是的,你是对的,但你的意思是,“你不能将元素设置到末尾”?
  • @SarthakMittal 如果列表中有x 元素,那么如果y > x,则不能在y 位置添加另一个元素。换句话说:如果列表中有 5 个元素,list.add(10, "blub"); 将失败。
  • 如果ArrayList为空,则只能设置到元素0。如果它只有一项,则只能设置到元素0和1,以此类推。如果尝试设置为更大的索引,你会得到 IndexOutOfBoundsException。

标签: java javascript arrays arraylist


【解决方案1】:

在标准的 JDK 中没有这样的类。

您最好的选择可能是围绕 ArrayList 创建一个包装器 并提供set(int index,Object value)等方法

它的实现如下所示:

public void set(int index,Object value) {
   while (list.size() <= index) {
       list.add(null); // filling the gaps
   }   
   list.set(index,value); 
}

【讨论】:

    【解决方案2】:

    标准 JDK 中未提供此类实现,但您可以使用 GrowthList(来自 Apache Commons Collections)。

    List<String> list = new GrowthList<>(); //[]
    list.add(5, "test"); //[null, null, null, null, null, test]
    

    【讨论】:

    • 这正是我想要的。
    【解决方案3】:

    您可以使用Arrays.fill。看看这个response

    【讨论】:

    • Arrays.fill 对普通静态数组执行函数,如果索引超出范围则抛出异常。它什么也没有扩展。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 2018-10-04
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 2018-12-11
    相关资源
    最近更新 更多