Java无法创建HashMap列表

时间:2013-11-01 17:56:46

标签: java hashmap

我正在尝试将多个hashmap对象添加到列表中。第一个添加OK。但是在下一轮比赛中它会因异常错误" 5"而崩溃。我确实为每一轮创建了一个新的hshmap对象,但它仍然崩溃。

HashMap<String, Object> data;
ArrayList<HashMap<String, Object>> dataList = new ArrayList<HashMap<String, Object>>();

for(int i=0;i<iCount;i++)
    {
        arrRow = resSearchItems.get(i).split("\\^"); 

        {
            data = new HashMap<String, Object>();           

            data.put("ResNumber", arrRow[0]);
            data.put("MeetingType#", arrRow[1]);
            data.put("Topic", arrRow[2]);
            data.put("MeetingDate", arrRow[3]);
            data.put("Motion", arrRow[4]);
            data.put("Votes", arrRow[5]);

            dataList.add(data);

        }                       
    }

谢谢

3 个答案:

答案 0 :(得分:0)

您应该将arrRow.length -1检查为要访问阵列的最大索引。如果此值小于5,那么您将获得ArrayIndexOutOfBoundsException

答案 1 :(得分:0)

两个想法:

  1. iCount来自哪里?
  2. 尝试使用以下方法替换方法调用以检索数据:

    arrRow = "one^two^three^four^five^six".split("\\\\^");

  3. 并查看您的代码是否仍然崩溃。这编译并运行正常:

    import java.util.HashMap;
    import java.util.ArrayList;
    
    public class HashmapTest {
      public static void main(String args[]) {
        HashMap<String, Object> data;
        ArrayList<HashMap<String, Object>> dataList = new ArrayList<HashMap<String, Object>>();
        String[] arrRow;
        int iCount = 4;
    
        for(int i=0;i<iCount;i++) {
          arrRow = "one^two^three^four^five^six".split("\\^"); 
          data = new HashMap<String, Object>();           
    
          data.put("ResNumber", arrRow[0]);
          data.put("MeetingType#", arrRow[1]);
          data.put("Topic", arrRow[2]);
          data.put("MeetingDate", arrRow[3]);
          data.put("Motion", arrRow[4]);
          data.put("Votes", arrRow[5]);
    
          dataList.add(data);
    
        }                       
        System.out.println("hashmap count:" + dataList.size());
      }
    }
    

    这是某种抓取数据吗?如果每个resSearchItems字符串不包含6个项目,您可能需要尝试以下内容:

     HashMap<String, Object> data;
     ArrayList<HashMap<String, Object>> dataList = new ArrayList<HashMap<String, Object>>();
     String[] hashKeys = {"ResNumber","MeetingType#","Topic","MeetingDate","Motion","Votes"};
    
     for(int i=0;i<iCount;i++) {
       arrRow = resSearchItems.get(i).split("\\^");  
       data = new HashMap<String, Object>();           
    
       for(int j=0;j<arrRow.length && j<hashKeys.length;j++) 
          data.put(hashKeys[j], arrRow[j]);
    
       dataList.add(data);
     }         
    

答案 2 :(得分:0)

resSearchItems.get(i)其中i = 1可能会返回null,我们无法猜测。此外,如果arrRow不包含6个或更多元素,则会抛出java.lang.ArrayIndexOutOfBoundsException