我正在尝试使用此代码创建一个初始大小为10
的数组列表。
List<EWSMessage> messages = new ArrayList<EWSMessage>(10);
List<EWSMessage> newMessages = new ArrayList<EWSMessage>(startMessages.size() - 10);
for (int i = 0, count = startMessages.size(); i < count; i++) {
if (i < 10) {
messages.set(i, startMessages.get(i));
} else {
newMessages.set(i - 10,startMessages.get(i));
}
}
我的问题是我需要填充数组列表才能在for循环中设置值。我只是不明白该怎么做。此外,startMessages
在方法中声明为List<EWSMessages>
。
答案 0 :(得分:2)
此行创建一个列表,初始容量为10 - 但大小为零。
List<EWSMessage> messages = new ArrayList<EWSMessage>(10);
提供初始容量是可选的。当您向其中添加元素时,列表将会增长。
添加元素的简便方法是使用add() method:
List<EWSMessage> messages = new ArrayList<EWSMessage>();
List<EWSMessage> newMessages = new ArrayList<EWSMessage>();
for (int i = 0, count = startMessages.size(); i < count; i++) {
if (i < 10) {
messages.add( startMessages.get(i));
} else {
newMessages.add( startMessages.get(i));
}
}
答案 1 :(得分:1)
ArrayList
不是数组。在数组中,当您创建它时,您会说出您需要多少个位置,然后您可以访问所有这些位置。如果你说:
int[] arr = new int[10];
然后您可以立即使用arr[5]
和arr[8]
等。
但ArrayList
不是那样的。它只有添加的项目数量。传递给构造函数的数字只是告诉它您认为可能需要多少个位置,但它不是列表中可用的项目数 - 初始大小为0.在您add
项目之后,大小是1,依此类推。因此,在创建列表时,您实际上不必传递数字:
List a = new ArrayList(); // The size is 0 but you can add items.
List b = new ArrayList(10); // The size is also 0! The 10 is just the capacity!
set
方法更改现有项。如果您没有添加项目,那么它将无法工作 - 它抱怨您正在尝试更改不存在的项目。首先,您需要使用add
将项目添加到列表中,然后您可以使用set
更改它们。
如果您需要撤消列表,可以使用Collections.reverse(list)
。它将反转给定的列表。如果你想要一个直列表和一个反向列表,你可以这样做:
// Fill list 1 by adding to it, then:
List list2 = new ArrayList(list1);
Collections.reverse(list2);
这会首先将所有项目从list1
复制到list2
,然后反转list2
。
答案 2 :(得分:0)
BTW一种不同的方法,可以创建由原始列表支持的视图。
int size = startMessages.size();
List<EWSMessage> messages = startMessages.subList(0, Math.min(10, size));
List<EWSMessage> newMessages = startMessages.subList(10, Math.max(10, size));
我会声称这更清楚,但是对于少于10的最小/最大检查。