개발/Java

[Java] Collection Framework - List

suniverse 2023. 3. 5. 00:55

🔍 List 계열

- 인덱스 번호를 사용하여 저장 순서가 유지된다 

- 데이터의 중복이 허용된다 

- 배열과 유사하나, 배열과 달리 저장 공간이 자동으로 확장된다 

- List 계열의 구현체 클래스 : ArrayList, Vector, LinkedList 등 

- 기본적은 메서드들이 대부분 Set 계열과 동일하다 (부모가 동일하기 때문이다) 

 

🔍 ArrayList vs Vector

- 기본적인 구조가 동일하며, 메서드가 동일하다. 

- ArrayList와 Vector가 다른 점은 Vector의 경우 멀티쓰레드 환경에서 안전하게 객체르르 사용할 수 있다! 

=> ArrayList는 멀티쓰레드 환경을 지원하지 않는다. 

 

🔍 ArrayList vs LinkedList

- 기본적인 구조가 완전 다르며, 메서드는 동일하다. 

- ArrayList는 배열 구조로써 인덱스를 활용하므로 데이터 탐색이나 "순차적인" 추가 / 삭제가 빠르다 

- LinkedList는 다음 데이터의 위치를 현재 데이터가 갖고 있는 형태이며 

항상 시작점부터 순차적으로 다음 데이터를 추적해가는 형식의 구조 

=> 중간 데이터 추가/삭제는 빠르지만, 데이터 탐색이나 순차적인 작업은 느리다. 

 

 

 

✍ List 객체 생성 후 요소 저장하기 

public static void main(String[] args) {
    List list = new ArrayList(); // list 객체 생성 
    
    // 요소 추가 
    list.add("abcde");
    list.add(2);
    list.add(100); 

    System.out.println("list 객체가 비어있는가? " + list.isEmpty());
    System.out.println("list 객체에 저장된 요소의 갯수는? " + list.size());
    System.out.println("list 객체의 모든 요소 출력 : " + list);
}

💻

Set 계열의 메서드와 거의 동일하다. 

 

✍ List 객체의 모든 요소 꺼내기 

일반 for문과 향상된 for문으로 배열처럼 모든 요소를 출력할 수 있다. 

for(int i=0; i<list.size(); i++) { // 일반 for문
    System.out.print(list.get(i) + " ");
}

for(Object o : list) { // 향상된 for문
    System.out.print(o + " ");
}

💻

 

✍ 기존 인덱스를 밀어내고 새로운 요소 삽입이 가능하다 

list.add(2, 3);

2번 인덱스를 밀어내고 정수 3을 삽입한다. 

 

System.out.println("밀어내기 전 2번 인덱스 : " + list.get(2));
System.out.println("밀어내기 전 list의 전체 요소 : " + list);
list.add(2, 3); // 2번 인덱스 밀어내고 정수 3 삽입
System.out.println("------------------------------------------------");
System.out.println("밀어내기 후 2번 인덱스 : " + list.get(2));
System.out.println("밀어내기 후 list의 전체 요소 : " + list);

💻