例如,我想将1对象添加到第一个索引中,然后将另一个对象添加到索引5中。所以我没有向2,3,4,5添加任何内容。这可能吗?
我想这么做的主要原因是我有两种活动。我想把第一种活动从1-5存储在列表上,第二种存储在6-10。这样,当我问用户她在寻找什么样的活动时(第一种类型还是第二种类型),我将知道数组列表的哪一部分要开始查看。
发布于 2014-11-06 21:23:10
不不可能。如果试图向索引中添加超出当前列表大小的内容,您将得到一个IndexOutOfBoundsException。
但是,您可以首先使用列表类型的“空”实例(或者null )初始化列表,并使用set而不是add。
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;
}输出:
[activity 1, null, null, null, null, activity 2, null, null, null, null]有必要使用set而不是add,或者通过每次add调用来增加列表的大小。这将在较高索引上移动当前条目(如果在6以下的索引上添加某些内容,则索引7上的元素将位于索引上)。所以你应该考虑一下你现在的想法。也许使用两个列表或数组比较容易。
发布于 2014-11-06 21:19:47
通常情况下不会,因为这不是列表抽象的工作方式。列表具有可变大小,其大小等于它包含的元素数。它通过数字索引提供访问,但只访问其现有元素的索引。
您可以通过填充null来实现这一点,例如:
public static void ensureSize(List<?> inList, int numIndices) {
if(inList.size() >= numIndices) {
return;
}
for(; numIndices > 0; --numIndices) {
inList.add(null);
}
}请注意,采用这种方法:
null元素,直到它们成为其他元素的set (就像数组一样)。add和remove会导致元素的索引发生变化。确保您正在适当地使用set和get。但是,如果您的列表的大小是预先知道的,并且是固定的,那么简单地使用一个数组可能是非常合适的。
如果您只是想通过列表接口,因为您发现它很容易使用,您也可以使用Arrays#asList初始化它。
// ( java.util.Arrays )
List<String> fixedList = Arrays.asList(new String[n]);这将创建一个具有固定大小的列表,该列表将环绕数组。您可以在上面使用set和get,但不能使用add和remove。(调用add、remove和其他试图更改大小的方法将引发异常。)
发布于 2014-11-06 21:27:11
https://stackoverflow.com/questions/26789497
复制相似问题