我可以使用ArrayList填充LinkedHashMap吗?

时间:2014-02-27 09:25:22

标签: java android arraylist

我的问题是,我可以使用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

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");
        }
    }

}