ckrmsckrms19   5년 전

List<LinkedList<...>>을 사용하여 문제를 풀었는데, index 를 0이 아니라 1부터 사용해서 아래에서처럼 변수 선언시 1부터 new LinkedList<>() 형식으로 리스트를 선언했습니다. 이렇게 하니 아래처럼 runtime error가 나더군요. 

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 0 
      at java.util.ArrayList.rangeCheckForAdd(Unknown Source)
      at java.util.ArrayList.add(Unknown Source)
      at Main.main(Main.java:46)

new LinkedList<>() 선언을 index 0 부터 하면 문제없이 프로그램이 돌아가는 데, 이유를 모르겠습니다. 최상위 List는 그 하위 List를 가리키고 있는 참조값들을 갖고 있는 리스트여서 굳이 index 0을 선언해 줄 필요가 없다고 이해하고 있는데 뭐가 틀린건가요?   

isku   5년 전

ArrayList는 데이터를 넣을 때마다 size가 증가합니다.

또, 해당 size 안에서만 데이터를 넣을 수 있습니다.

처음 원소가 아무것도 없을 때 size가 0이고, 1번째 위치에 데이터를 넣으려고 하니 당연히 IndexOutOfBoundsException가 발생합니다.


따라서 1번째부터 데이터를 넣으려면, 0번째에 의미없는 데이터를 넣어야 합니다.

만약 그게 싫으시다면 

List의 크기가 정해져 있으므로, 처음부터 아래 코드와 같이 크기가 정해진 LinkedList의 배열로 사용하시면 됩니다.

ckrmsckrms19   5년 전

그런 이유군요 답변 감사합니다!

댓글을 작성하려면 로그인해야 합니다.