2014-02-27 42 views
0

我的问题是我可以使用ArrayList元素填充LinkedHashmap我可以使用ArrayList填充LinkedHashMap

因为每次它抛出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

是大小与'contactsArray'相同的'numbersArray'? –

+0

wat是contactsArray和numberArray的类型?他们是ArrayList还是String数组? – AJJ

+0

我明白了,不,它不是。 – Muhammad

回答

1

您与contactsArray做迭代和numbersArray获取值。这是越野车。你应该改变你的代码来检查两个数组对象上的索引。然后,从它们中检索值。上述代码仅在两个集合具有相同数量的值时才起作用。正如黑带所说,当达到任何收集最后一个索引时,您需要有一个条件来退出循环,以避免发生异常。另一种巧妙的方法是改变你conditional testfor循环这样

for (int i = 0; i < contactsArray.size() && i < numbersArray.size(); i++) { 
+0

或至少更新循环退出条件到两种尺寸的最小值 – Blackbelt

+0

@blackbelt是的,同意! – Keerthivasan

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

你应该确保你的迭代循环的两个数组

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

}的最小尺寸