단단히

컬렉션 프레임워크( Collection Framework / C.F)_List.ArrayList 본문

카테고리 없음

컬렉션 프레임워크( Collection Framework / C.F)_List.ArrayList

이게아닌데 2022. 7. 2. 13:12

ArrayList는 저장용량을 초과한  객체들이 들어오면 자동적으로 저장 용량(capacity)이 늘어난다.

package list;

public class array{
	public static void main(String[] args) {
    	String[] arr = new Srting[3]; //배열 생성
        arr[0] = "안녕";
        arr[1] = "반가워";
        arr[2] = "잘가";
        
        for(int i = 0; i<arr.length; i++){
        	System.out.println(arr[i]);
        }
    }

[ArrayList]

package list;

import java.util.ArrayList;

public class ArrayList{
	public static void main(String[] args) {
    
    ArrayList a = new ArrayList();   //ArrayList를 생성한
    a.add("haha");
    a.add("hoho");
    a.add("hehe");
    
    for(int i =0; i<a.size(); i++) {
    	System.out.println(a.get(i));
    }
}

배열과 비교를 해보면 차이점이 있다.

  1. import를 이용한다. ArrayList를 사용하기 위해서는 java.util.ArrayList;를 불러와야 한다.
  2. 길이를 의미하는 키워드가 다르다. 배열의 길이는 .length를 사용하고 ArrayList는 .size()메서드를 사용한다.
  3. 배열은 값을 arr[i]와 같이 바로 값을 가져오는 데에 반해, ArrayList는 a.get(i)로 값을 가져온다.

 

ArrayList 객체를 생성하면 내부에 10개의 객체를 저장할 수 있는 초기 용량을 가진다.

저장되는 객체수가 10개를 넘어가면 자동으로 용량이 증가된다.


[ArrayList에 제네릭 사용 이유]

List list = new ArrayList();

이렇게 생성된 객체는 모든 타입의 객체가 저장될 수 있다. 타입의 가장 조상인 Object타입으로 (자동) 반환되어 저장되기 때문이다. 이렇게 가장 조상 타입인 Object타입으로 저장되면 모든 타입을 저장할 수 있지만 다시 찾아올 때 객체에 맞는 타입으로 변화해서 가져와야 하는 이중변환 현상이 나타난다.

이렇게 반복적인 타입 변환은 실행 성능을 저하시킨다.

List list = new ArrayList();     //컬렉션 생성,자동형변환
list.add("텀블러");
Object obj = list.get(0);  //컬렉션에서 객체를 가져오는 get();
String obj = (String)obj;  //강제형변환

그래서 타입을 지정해서 불필요한 타입 변환을 하지 않도록 제네릭을 함께 사용한다. 

List<String> list = new List<>();
//List<String> list = new List<String>(); 과 동일

list.add("텀블러");
String cup = list.get(0);  //형변환없이 값을 얻음

 

ArrayList는 특정 인덱스 객체가 제거되면 뒤에 있는 인덱스가 하나씩 앞으로 앞당겨진다.

전체가 당겨지거나 밀리기 때문에 빈번한 삽입이나 삭제가 일어나는 곳에서 ArrayList를 사용하는 것의 바람직하지 않다.(>> LinkedList가 적합하다.)

객체를 맨 마지막에 추가하는 경우나 인덱스 검색하는 경우에는 ArrayList를 사용하는 게 더 좋은 성능을 발휘한다.

 

잘 없지만 객체의 길이를 고정시킨 체 List를 생성하는 경우가 있다.

List<String> list = Arrays.asList("아메리카노","프라프치노");
//객체를 고정시킨 ArraysList

for(String menu : list){
	System.out.println(menu);
}
//향상된 for문

 

Comments