java.lang.ArrayIndexOutOfBoundsException:List中的2 <hashmap <string,string>&gt;

时间:2015-07-17 09:45:13

标签: java arraylist

我有这种方法必须以这种方式插入ArrayList元素:

0 Low 10
0 High 11
0 High 3
1 Low 54

为此,我对一行中的最后两个元素使用HashMap,然后将此HashMap放在ArrayList中。这是代码:

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
    HashMap<String, String> map = new HashMap<>();
    List<HashMap<String, String>> data = new ArrayList<>();
    String label[];
    JCheckBox casella=new JCheckBox();

    //System.out.println(data.get(0).get("name"));

    if(jList2.getModel().getSize()>0){ //Se sono state selezionate PAD
        for(int i=0; i<jPanel2.getComponentCount(); i++){ //Controlla se le PAD hanno i prode
            label=(casella.getText()).split(" ");
            if( (casella=(JCheckBox) jPanel2.getComponent(i)).isSelected() ){ //Si
                map.put(label[2], label[4]);
                data.add(1,map);
            }
            else{ //No
                map.put(label[2], label[4]);
                data.add(0,map);
            }
        }
        System.out.println(data.size());

问题在于map.put(label[2], label[4]);行上有这条消息:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2

我无法理解我错在哪里。

2 个答案:

答案 0 :(得分:3)

如果由

产生的String数组
label=(casella.getText()).split(" ");

没有足够的元素(小于2分别),你得到这个例外。

在使用它之前,你应该知道这个数组有多长。

答案 1 :(得分:1)

  

线程中的异常&#34; AWT-EventQueue-0&#34;   java.lang.ArrayIndexOutOfBoundsException:2

意味着您Array中没有足够的元素来提取它。

Java中,Array索引从0开始,因此代码可能会起作用,也可以提取map.put(label[1], label[3]);,因为它们在两者中都很常见if and else条件:

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        HashMap<String, String> map = new HashMap<>();
        List<HashMap<String, String>> data = new ArrayList<>();
        String label[];
        JCheckBox casella=new JCheckBox();

        //System.out.println(data.get(0).get("name"));

        if(jList2.getModel().getSize()>0){ //Se sono state selezionate PAD
            for(int i=0; i<jPanel2.getComponentCount(); i++){ //Controlla se le PAD hanno i prode
                label=(casella.getText()).split(" ");
                map.put(label[1], label[3]);
                if( (casella=(JCheckBox) jPanel2.getComponent(i)).isSelected() ){ //Si 
                    data.add(1,map);
                }
                else{ //No
                    data.add(0,map);
                }
            }
            System.out.println(data.size());
}}