자바 의 ArrayList reove (Object obj) 방법 에 대한 분석
2642 단어 자바
Array List 의 reove (Object obj) 방법 도 살 펴 봤 습 니 다. 다음은 reove 방법 입 니 다.
public boolean remove(Object o) {
if (o == null) {
for (int index = 0; index < size; index++)
if (elementData[index] == null) {
fastRemove(index);
return true;
}
} else {
for (int index = 0; index < size; index++)
if (o.equals(elementData[index])) {
fastRemove(index);
return true;
}
}
return false;
}
이 단락 의 remove 방법 은 특유 의 의미 가 있 습 니 다. list 의 중간 값 이 null 인 요 소 를 지 울 수 있 습 니 다!테스트 코드 는 다음 과 같 습 니 다:
import java.util.ArrayList;
public class TestListNullRemove {
public static void main(String[] args) {
ArrayList list=new ArrayList();
list.add("s1");
list.add("s2");
list.add(null);
list.add("s3");
list.add("s4");
System.out.println("before remove list size:"+list.size());
for(Object obj:list)
System.out.println(obj);
System.out.println();
list.remove(null);
System.out.println("after remove list size:"+list.size());
for(Object obj:list)
System.out.println(obj);
}
}
물론 들 어 오 는 요소 가 null 이 아 닐 때 먼저 요소 의 equals 방법 을 사용 하고 같 을 때 만 fastRemove 방법 을 사용 할 수 있 습 니 다.
다음은 remove 방법 은 주로 fastRemove 방법 을 호출 했 습 니 다. 그러면 fastRemove 방법 은 무엇 을 했 습 니까?fastRemove 방법 으로 하 는 동작 도 의미 가 있 습 니 다. 코드 는 다음 과 같 습 니 다.
private void fastRemove(int index) {
modCount++;
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
elementData[--size] = null; // Let gc do its work
}
알 수 있 듯 이 Array List 는 하나의 배열 (Array List, 하하) 을 사용 하여 값 을 참조 하 였 습 니 다. 그러나 이 코드 는 소 B 가 있 는 곳 이 두 군데 있 습 니 다. 하 나 는 이동 할 요소 뒤의 요 소 를 직접 배열 로 복사 하여 앞으로 이동 하 는 것 입 니 다 (요소 의 연속 성 유지). 다른 하 나 는 마지막 줄 코드 입 니 다.
4. 567913. 이 코드 의 역할 은 요 소 를 null 로 참조 하 는 것 입 니 다. 이렇게 하 는 목적 은 메모리 누 출 을 피 하 는 것 입 니 다 (그렇지 않 으 면 실제 배열 에 서 는 이 인용 이 있 습 니 다. gc 는 쓰레기 회수 가 불가능 합 니 다. 자바 의 스 택 데이터 구조의 실현 방식 과 유사 합 니 다), perfect!
자바 의 라 이브 러 리 는 큰 보물 이 라 고 해 야 합 니 다. 그러나 자신 이 시간 에 공력 이 부족 하 다 면 코드 는 알 아 볼 수 있 지만 묘 미 를 알 수 있 는 것 은 아 닙 니 다. 자신 이 오래 침 음 했 습 니 다. 지금 은 라 이브 러 리 에 대한 체험 이 점점 깊 어 지고 있 습 니 다. hehe!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.