2009-09-27 108 views
2

我遇到以下代码的问题。我获得了错误信息Java中ArrayList类的问题

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 
    at java.util.ArrayList.rangeCheck(ArrayList.java:571) 
    at java.util.ArrayList.set(ArrayList.java:364) 
    at Test.main(Test.java:17) 

我不明白为什么。我有一个列表,它被初始化,然后我遍历它,然后我想用第一个列表的值填充另一个列表。我不明白为什么我得到IndexOutOfBoundsException。看来我的初始化是不正确的。提前致谢。

public static void main(String[] args) { 

     String s1 = "one"; 
     String s2 = "one"; 
     ArrayList list = new ArrayList(); 
     list.set(0, s1); 
     list.set(1, s2); 
     Iterator it = list.iterator(); 
     ArrayList listToFill = new ArrayList(); 
     int k = 0; 
     while (it.hasNext()) { 
      String m = "m"; 
      listToFill.set(k, m); 
      k++; 
     } 

    } 

回答

11

您正在使用错误的方法添加项目。

或者:

list.add(0, s1); 
list.add(1, s2); 

或较好的是:

list.add(s1); 
list.add(s2); 

组试图取代目前存在的项目,但没有什么是那里。

More info

3

你从来不会使用

it.next(); 

也许这不是重点,但我不认为你需要一个无限循环。

+0

不错,我错过了。 – tster 2009-09-27 16:28:53

+0

非常感谢,那是我的另一个错误,我没有想到。它正在工作:) – user42155 2009-09-27 16:49:16

0

为什么你会写这个将一个List复制到另一个List?

这是更为简洁:

import java.util.ArrayList; 
import java.util.List; 

public class ListDemo 
{ 
    public static void main(String[] args) 
    { 

     List<String> l1 = new ArrayList<String>(args.length); 
     for (String arg : args) 
     { 
     l1.add(arg); 
     } 
     System.out.println("l1: " + l1); 
     List<String> l2 = new ArrayList<String>(l1); 
     System.out.println("l2: " + l2); 
    } 
} 
+4

甚至更​​好: Collections.copy(l2,l1); – 2009-09-27 16:32:54

+3

或l2.addAll(l1); – tster 2009-09-27 16:36:20

+2

'List l1 = Arrays.asList(args);列表 l2 =新的ArrayList (l1);' – 2009-09-27 16:46:12

0

当你有一个堆栈跟踪THN用它来找出事故发生在哪里!在这里,put()是在javadoc重新开启的一个死牌。