使用Hashmap Java的数组超出界限异常

时间:2013-06-14 15:13:10

标签: java hashmap

我正在尝试将一个带有char数组的hashmap作为值并将一个字符串作为键。我正在尝试打印出键和值,但不断获取数组超出范围的异常。我不确定问题是什么。 (另外我可能会尝试不正确地打印出地图;我有点像其他帖子一样)。有人可以帮我解决这个问题。谢谢你的帮助。这是我的代码:

public class MapExample {

     public static void main(String[] args) {

       Map<String,char[]> mp=new HashMap<String, char[]>();

       char[] words = new char[2];
       words[0] = 'a';
       words[1] = 'b';
       words[2] = 'c';

       mp.put("1", words);
       mp.put("2", words);
       mp.put("3", words);

       Set s=mp.entrySet();
       Iterator it=s.iterator();

        while(it.hasNext())
        {           
            Map.Entry m =(Map.Entry)it.next();
            int key=(Integer)m.getKey();
            String value=(String)m.getValue();

            System.out.println("Key :"+key+"  Value :"+value);
        }
    }
}

5 个答案:

答案 0 :(得分:7)

数组基于零。增加words的数组大小,以便您可以在索引2

分配元素
char[] words = new char[3];

答案 1 :(得分:6)

   char[] words = new char[2];
   words[0] = 'a';
   words[1] = 'b';
   words[2] = 'c'; <-- HERE

您创建了一个双元素数组,但在其中放入了三个项目。

Java中的数组具有固定的大小,一旦初始化就无法修改。

然后:

String value=(String)m.getValue();

这不起作用:char[]不是String

你必须:

String value = new String((char[]) m.getValue());

但你应该是地图的.entrySet(),真的。

答案 2 :(得分:3)

new char[2]并不意味着“制作一个索引最多为2的新数组”。这意味着“创建一个可以容纳2个值的新数组”,并且当数组索引从0开始时,索引从0变为1.

答案 3 :(得分:1)

字[2]是罪魁祸首!数组字是或大小2.所以你只能拥有 单词[0]和单词[1]

答案 4 :(得分:1)

创建新数组时使用的整数参数不是该数组中应该可用的最高索引,而是数组的实际大小。因此,正如其他人所说,你会想要

char[] words = new char[3];

创建一个能够容纳三个元素的数组。