ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바의정석-배열의 장단점(arrayList 또는 배열 for문으로 삭제 했는데 숫자가 남아요 ㅠㅠ)
    Study/Java 2023. 1. 17. 23:23
    반응형

     

     

    1.배열의 장단점

    *장점-배열은 구조가 간단하여 데이터를 읽는데 걸리는 시간이 짧다.

    *단점

    (1)크기를 변경 할수 없다.

    크기를 변경해야되는 경우 

     

    첫번째, 더큰 크기의 배열을 생성해야 된다.

    두번째, 이전 배열에 있던 데이터를 복사한다.

    세번째. 참조변수의 주소값을 변경해야 된다.

     

    위에 3단계를 거치기 때문에 크기변경시 시간이 많이 걸리고 비효율적이다.

    또한, 위와 같은 불편함을 제거하기위하여 큰크기의 배열을 생성할 경우 메모리를 차지하기 때문에 메모리관리 차원에서 그것 또한 비효율적이다.

     

    (2)배열 중간에 데이터를 추가하거나 삭제할 경우 시간이 많이 걸린다.

    왜? 중간에 추가 할경우 추가하는 위치 뒤에 있는 데이터를 한칸씩밀면서 저장을 해야하기 때문.

    그와 같은이치로 삭제할 경우에도 중간에 있는 데이터를 삭제후 뒤에 데이터를 한칸씩 당겨서 복사해서 넣어야 하기 때문.

     

    2.적용

    package class11;
    
    import java.util.ArrayList;
    
    public class Ex11_2 {
    
    	public static void main(String[] args) {
    		
    		
    		//배열에 데이터 추가하기
    		ArrayList list = new ArrayList(5);
    		
    		for(int i=0;i<5;i++) {
    			list.add(i);
    		}
    		System.out.println(list);
    		
    		
    		//배열에 데이터 앞에서 삭제하기 
    		for(int i=0;i<=list.size();i++) {
    			list.remove(i);
    		}
    		System.out.println(list);	
    
    	}
    
    }

    배열이나 arraylist를 배워서 for문을 사용 해서 안에 있는 배열을 제거했다.

    그런데 이게 웬걸...숫자가 남는다

    왜? 그럴까?

    출처-자바의정석 강의

    위에 그림을 보면 배열은 삭제가 되면 앞으로 데이터를 당겨서 차곡차곡 정리하는 습관이 있기 때문

    그래서 인덱스0번 자리를 삭제후 뒤에 데이터를 당겨와 다시 0번자리는 채워지고 for문의 그다음인덱스인 1의자리의 데이터가 삭제가 되면 0번자리의 데이터가 남게 되는것!

     

    그렇다면 해결방법은??

    		//배열에 데이터 뒤에서 삭제하기
    		for(int i=list.size()-1;0<=i;i--) {
    			list.remove(i);
    		}
    		System.out.println(list);

    배열을 위와 같이 꺼꾸로 삭제 하면된다. 

    출처-자바의정석 강의

    위의 그림과 같이 꺼꾸로 지워가면 순차적으로 지워지면서 그자리에 null로 채워지기 때문에 모든데이터를 깔끔히 지울수 있다!

     

     

    반응형

    댓글

Designed by Tistory.