JAVA - 컬렉션 프레임웍(Collections Framework) (2)

jodbsgh·2022년 3월 31일
0

💡"JAVA"

목록 보기
29/67

ArrayList

ArrayList는 List인터페이스를 구현하기 때문에 데이터의 저장순서가 유지되고 중복을 허용한다는 특징이 있다.

만약 배열에 더 이상 저장할 공간이 없으면 보다 큰 새로운 배열을 생성해서 기존의 배열에 저장된 내용을 새로운 배열로 복사한 다음에 저장된다.

ArraYList를 생성할 때, 저장할 요소의 개수를 고려해서 실제 저장할 개수보다 약간 여유있는 크기로 하는 것이 좋다. 생성할 때 지정한 크기보다 더 많은 객체를 저장하면 자동적으로 크기가 늘어나기는 하지만 이 과정에서 처리시간이 많이 소요되기 때문이다.

데이터를 읽어오고 저장하는 데는 효율이 좋지만, 용량을 변경해야할 때는 새로운 배열을 생성한 후 기존의 배열로부터 새로 생성된 배열로 데이터를 복사해야하기 때문에 상당히 효율이 떨어진다.

그래서 처음에 저장할 데이터의 개수를 잘 고려하여 충분한 용량의 인스턴스를 생성하는 것이 좋다.

remove메서드 예제)

	public Object remove(int index){
    	Object oldObj = null;
        
        if(index < 0 \\ index >= size)
        	throw new IndexOutOfBoundsException("범위를 벗어났습니다.");
        oldObj = data [index];
        
        if(index != size-1){
        	System.arraycopy(data, index+1, data, index, size-index-1);
        }
        data[size-1] = null;
        size--;
        
        return oldObj;
    }

Object remove(int index)메서드는 지정된 위치(index)에 있는 객체를 삭제하고 삭제한 객체를 반환하도록 작성했다. 삭제할 객체의 바로 아래에 있는 데이터를 한 칸씩 위로 복사해서 삭제할 객체를 덮어쓰는 방식으로 처리한다. 만일 삭제할 객체가 마지막 데이터라면, 복사할 필요없이 null로 변경해주기만 하면 된다.

과정

  1. 삭제할 index 데이터 다음에 있는 index 데이터를 한 칸씩 위로 복사해서 삭제할 데이터를 덮어쓴다.
    System.arrycopy(data,3, data, 2, 2)
    //data[3]에서 data[2]로 2개의 데이터를 복사하라는 의미.

  2. 데이터가 모두 한 칸씩 위로 이동하였으므로 마지막 데이터는 null로 변경해야한다.
    data[size-1] = null;

  3. 데이터가 삭제되어 데이터의 개수가 줄었으므로 size의 값을 1 감소시킨다.
    size--;

profile
어제 보다는 내일을, 내일 보다는 오늘을 🚀

0개의 댓글