我的问题是,我可以使用LinkedHashmap
元素填充ArrayList
吗?
因为每次抛出IndexOutOfBoundsException
。以下是我的代码,
ArrayList<String> contactsArray = new ArrayList<String>();
ArrayList<String> numbersArray = new ArrayList<String>();
linkedMap = new ArrayList<LinkedHashMap<String, String>>();
linked = new LinkedHashMap<String, String>();
int x = contactsArray.size();
if (contactsArray.size() > 0) {
for (int i = 0; i < x - 1; i++) {
linked.put("1", contactsArray.get(i));
linked.put("2", numbersArray.get(i));
}
linkedMap.add(linked);
}else{
msg("0");
}
logcat的:
02-27 11:05:24.859: E/AndroidRuntime(3223): Caused by:
java.lang.IndexOutOfBoundsException: Invalid index 4, size is 4
答案 0 :(得分:1)
您正在使用contactsArray
进行迭代,并从numbersArray
获取值。这是错误的。您应该更改代码以检查两个数组对象上的索引。然后,从中检索值。只有当两个集合具有相同数量的值时,上述代码才有效。正如blackbelt所说,当达到任何收集最后一个索引时,你需要有条件退出循环以避免异常。另一种巧妙的方法是更改conditional test
for
循环中的 for (int i = 0; i < contactsArray.size() && i < numbersArray.size(); i++) {
{{1}}
答案 1 :(得分:0)
更改您的条件如下...因为您要从两个不同的数组中检索值,所以您必须检查两个数组。
int x = contactsArray.size();
int y = numbersArray.size();
if (x > 0 && y > 0) {
for (int i = 0; i < x - 1 && i < y-1; i++) {
linked.put("1", contactsArray.get(i));
linked.put("2", numbersArray.get(i));
}
linkedMap.add(linked);
}else{
msg("0");
}
答案 2 :(得分:0)
用以下代码替换您的代码:
linkedMap = new ArrayList<LinkedHashMap<String, String>>();
linked = new LinkedHashMap<String, String>();
int size = contactsArray.size();
if (contactsArray.size() > 0 && numbersArray.size()>0) {
int iterator = (contactsArray.size() > numbersArray.size()) ? contactsArray.size() : numbersArray.size();
for (int i = 0; i < iterator ; i++) {
linked.put("1", contactsArray.get(i));
linked.put("2", numbersArray.get(i));
}
linkedMap.add(linked);
}else
{
msg("0");
}
你应该确保你的迭代器在两个数组的最小尺寸上循环
答案 3 :(得分:0)
import java.util.ArrayList;
import java.util.LinkedHashMap;
public class Test {
public static void main(String[] args) {
int count = 0, i = 0;
ArrayList<LinkedHashMap<String, String>> linkedMap;
LinkedHashMap<String, String> linked;
ArrayList<String> contactsArray = new ArrayList<String>();
ArrayList<String> numbersArray = new ArrayList<String>();
linkedMap = new ArrayList<LinkedHashMap<String, String>>();
linked = new LinkedHashMap<String, String>();
for (String item : contactsArray) {
linked.put("1", item);
if (i < numbersArray.size()) {
linked.put("2", numbersArray.get(i));
i = i + 1;
}
linkedMap.add(linked);
}
if (contactsArray.isEmpty()) {
msg("0");
}
}
}