首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以在随机索引的情况下添加到空arrayList中吗?

可以在随机索引的情况下添加到空arrayList中吗?
EN

Stack Overflow用户
提问于 2014-11-06 21:13:07
回答 5查看 7.2K关注 0票数 2

例如,我想将1对象添加到第一个索引中,然后将另一个对象添加到索引5中。所以我没有向2,3,4,5添加任何内容。这可能吗?

我想这么做的主要原因是我有两种活动。我想把第一种活动从1-5存储在列表上,第二种存储在6-10。这样,当我问用户她在寻找什么样的活动时(第一种类型还是第二种类型),我将知道数组列表的哪一部分要开始查看。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-11-06 21:23:10

不不可能。如果试图向索引中添加超出当前列表大小的内容,您将得到一个IndexOutOfBoundsException

但是,您可以首先使用列表类型的“空”实例(或者null )初始化列表,并使用set而不是add

代码语言:javascript
复制
public static void main(String[] args) {
    List<String> l = initList();
    l.set(0, "activity 1");
    l.set(5, "activity 2");
    System.out.println(l);
}

private static List<String> initList() {
    final List<String> l = new ArrayList<>();
    for (int i = 0; i < 10; i++) {
        l.add(""); // or null, but this can cause some problems ... (try to find an empty representation for an "activity" instance)
    }
    return l;
}

输出:

代码语言:javascript
复制
[activity 1, null, null, null, null, activity 2, null, null, null, null]

有必要使用set而不是add,或者通过每次add调用来增加列表的大小。这将在较高索引上移动当前条目(如果在6以下的索引上添加某些内容,则索引7上的元素将位于索引上)。所以你应该考虑一下你现在的想法。也许使用两个列表或数组比较容易。

票数 2
EN

Stack Overflow用户

发布于 2014-11-06 21:19:47

通常情况下不会,因为这不是列表抽象的工作方式。列表具有可变大小,其大小等于它包含的元素数。它通过数字索引提供访问,但只访问其现有元素的索引。

您可以通过填充null来实现这一点,例如:

代码语言:javascript
复制
public static void ensureSize(List<?> inList, int numIndices) {
    if(inList.size() >= numIndices) {
        return;
    }

    for(; numIndices > 0; --numIndices) {
        inList.add(null);
    }
}

请注意,采用这种方法:

  • 您的列表现在包含null元素,直到它们成为其他元素的set (就像数组一样)。
  • 在列表中调用addremove会导致元素的索引发生变化。确保您正在适当地使用setget

但是,如果您的列表的大小是预先知道的,并且是固定的,那么简单地使用一个数组可能是非常合适的。

如果您只是想通过列表接口,因为您发现它很容易使用,您也可以使用Arrays#asList初始化它。

代码语言:javascript
复制
//           ( java.util.Arrays )
List<String> fixedList = Arrays.asList(new String[n]);

这将创建一个具有固定大小的列表,该列表将环绕数组。您可以在上面使用setget,但不能使用addremove。(调用addremove和其他试图更改大小的方法将引发异常。)

票数 1
EN

Stack Overflow用户

发布于 2014-11-06 21:27:11

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26789497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档