2011-08-25 1 views
0
if (sList.size() > 0) { 
     for (int i = 0; i < tList.size(); i++) { 
      String a = sList.get(i).getString(); 
      String b = tList.get(i).getString(); 
      if (a.equals(b)) { 
       tList.remove(i); 
      } 
     } 
    } 

sList.Size 1 통해 반복, 나는이 오류가 계속 :
예외 : java.lang.IndexOutOfBoundsException : 인덱스 : 1, 크기 : 1는 자바 tList.size 그러나 100</p> <p>이며,리스트 문제

나는 이것이 왜 있는지 이해하지 못한다. 나는 또한 반복자, 같은 문제를 시도했다.

+2

목록에서 항목을 제거하면 목록의 크기가 변경됩니다! ..하지만 "i"가 증가하므로 결과적으로 유효하지 않은 값/초과 한 값이됩니다 ... – StefanNch

답변

1

그 이유는 루프에 하나의 요소 만있는 슬라이스를 반복하기 때문입니다. i> 0 일 때 예외가 발생합니다.

0

이것은 sList에 tList보다 적은 항목이 포함되어있는 경우 발생합니다. 두 카운터 모두에 단일 카운터를 사용하는 대신 sList의 요소를 반복하는 별도의 루프 카운터가 필요합니다.

1

당신은 당신이 말한 tList 반복되는 크기 (100)을 가지고 있지만 sList은 그래서 최대한 빨리 tList의 두 번째 항목에 도착 이미 sList의 크기를 초과로 크기 1.가.

removeAll을 사용하여 sList의 모든 것을 tList에서 제거 할 수 있습니다. equalshashCode 방법이 올바른지 확인하십시오.

0

0에서 100까지 반복합니다 (tList 크기). sList의 크기가 1이지만 sList[i]에 액세스하려고한다고합니다. 그래서 당신은 범위를 벗어납니다.

0

실제로는 sList을 반복하지 않고 tList (2 번째 줄)이고 sList 번째 줄에는 동일한 수의 요소 (3 번째 줄)가 있다고 가정하면 ... ' 다시 실패한 첫 번째 요소 (0)을 수행합니다.

0

자바리스트는 (다른 모든 컬렉션과 같은) 색인이 존재하지 않는 구성원 (액세스하려고하면 길이 1의 목록 위치 0

에 불과 멤버가 0에서 색인하는 당신이 여기서하고 있다면) 당신은이 예외를 얻을 것입니다. sList.size()1입니다

0

경우에만 따라서 당신은 왜

java.lang.IndexOutOfBoundsException: Index: 1, Size: 1

그래서, 당신은 이미 바인딩의 외출 읽을 때 i == 1 (기억지고있어,하지 1 인덱스 0에서 아이템을 얻을 수 있습니다 , java는 0이고, 숫자는 1이 아닙니다.