2014-07-14 3 views
0

내 작업에 다차원 arraylist를 사용하고 싶습니다. 이 문제를 해결하도록 도와주세요. 내 코드는 :이 프로그램을 실행하면다차원 Arraylist (색인 오류)

public class newType { 
    String name; 
    int id; 

    public newType() { 
    name=""; 
    id=0; 
    } 

    public newType(String name,int id) { 
    this.name=name; 
    this.id=id; 
    } 
} 

public class MainClass { 
    public static void main (String[] args) throws Exception {  

    HashMap<String, ArrayList<ArrayList<newType>>> temp=new HashMap<String, ArrayList<ArrayList<newType>>>(); 

    ArrayList<ArrayList<newType>> arrObj=new ArrayList<ArrayList<newType>>(); 

    arrObj.clear(); 
    arrObj.add(new ArrayList<ValueType>()); 
    arrObj.add(new ArrayList<ValueType>()); 
    arrObj.add(new ArrayList<ValueType>()); 
    arrObj.get(0).add(new newType("Jhon",1)); 
    arrObj.get(1).add(new newType("get",1)); 
    arrObj.get(1).add(new newType("book",1)); 
    arrObj.get(2).add(new newType("coma",1)); 
    arrObj.get(2).add(new newType("brother",1)); 
    temp.put("Jhon", arrObj); 

    arrObj.clear(); 
    arrObj.add(new ArrayList<newType>()); 
    arrObj.add(new ArrayList<newType>()); 
    arrObj.add(new ArrayList<newType>()); 
    arrObj.get(0).add(new newType("Mikel",1)); 
    arrObj.get(0).add(new newType("son",,2)); 
    arrObj.get(1).add(new newType("puts",2)); 
    arrObj.get(1).add(new newType("his",1)); 
    arrObj.get(2).add(new newType("when",1)); 
    arrObj.get(2).add(new newType("hich",1)); 
    temp.put("Mikel", arrObj); 

    arrObj.clear(); 
    arrObj=temp.get("Mikel"); 
    System.out.println(arrObj.get(0).get(0).name); 
    } 
} 

는, 컴파일러는 나에게 다음과 같은 오류를 제공합니다 :

오류가 arrObj.get 관련이

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.RangeCheck(Unknown Source) at java.util.ArrayList.get(Unknown Source) at MainClass.main(MainClass.java:47)

(0) 갔지 (0)

을 .NAME

어떻게 해결할 수 있습니까?

+0

한 배열 목록과 여러 차원 불가능 보인다! –

+0

@RomanC 무슨 뜻인지 모르겠다. 배열과 같은 규칙이 아닌가요? 2 차원 배열은 다른 1 차원 배열의 1 차원 배열입니다. 동일한 규칙을 List에 적용 할 수 있습니다 (OP는 하나의 ArrayList를 사용하여 다른 ArrayList를 저장합니다). – Pshemo

+0

@Pshemo 목록은 배열이 아니며 이름은 자신의 이름입니다. –

답변

4

put에서 HashMap으로 변경하면 2D ArrayList 복사본이 추가되지 않고 참조가 추가됩니다. 하지만 추가 할 때마다 2D ArrayList을 지우므로 그 내용을 쿼리 할 때까지 동일한 빈 2D ArrayList에 대한 2 개의 참조로 끝납니다.

매번 새로운 2D ArrayList을 작성하면 매번 별도의 오브젝트를 추가 할 수 있습니다. 대신

arrObj.clear(); 

arrObj = new ArrayList<ArrayList<newType>>(); 

시도 (이 clear()에 필요. 마지막으로 없다)