상세 컨텐츠

본문 제목

JAVA 14-1. 컬렉션 프레임워크 - List 컬렉션

Backend/JAVA-자바

by 사랑짱 2021. 7. 4. 21:14

본문

 

◆ 컬렉션 프레임워크(Collection Framwork)

- C.R.U.D를  효율적으로 하기 위해 제공되는 컬렉션 라이브러리

- 인터페이스를 통해서 정형화된 방법으로 다양한 컬렉션 클래스 이용

- Java.util 패키지에 포함

 

 

◆ 컬렉션 프레임워크의 주요 인터페이스

 

출처 : 이것이 자바다

 

1) List 계열 - ArrayList, Vector, LinkedList

- 순서를 유지하고 저장

- 중복 저장이 가능

 

2) Set 계열 - HashSet, TreeSet

- 순서를 유지하지 않고 저장

- 중복 저장 불가

 

3) Map 계열 - HashMap, Hashtable, TreeMap, Properties

- 키와 값의 쌍으로 저장

- 키는 중복 저장 불가/ 값은 상관없음

 


 

◆ List 컬렉션

- List<T> 인터페이스의 성질 : 순서를 보장하고 객체의 중복을 허용한다.

 

출처 : 이것이 자바다

 

1) ArrayList

- 초기용량 : 10 (따로 지정 가능)

- 저장 용량을 초과하여 객체가 들어오면 자동적으로 늘어남.

- 객체 제거가 가능(단, 삭제된 인덱스 뒤부터 마지막 인덱스까지 모두 앞으로 1씩 당겨짐)

 

※ 배열의 Helper class : Arrays

- Arrays의 메소드를 활용하여 다양한 기능(asList(), sort() 등)을 지원 받자!!!!!

 

 

2) Vector

- 내부 구현은  ArrayList와 동일

- Thread synchronization(스레드 동기화)가 가능하여

  복수의 Thread가 동시에 접근하여 객체를 추가/삭제하여 안전하게 조작 가능

 

 

3) LinkedList

- 인접 참조를 링크하여 체인처럼 관리

- 특정 인덱스에서 객체를 제거하거나 추가하게 되면 바로 앞뒤 링크만 변경

- 빈번한 객체 삭제와 삽입이 일어나는 곳에서는 ArrayList보다 좋은 성능

 

출처 : 이것이 자바다

 

※ ArrayList와 LinkedList 비교

- 객체 추가/제거 빈번하다면 LinkedList 사용

- 객체 검색 및 순차적 객체 추가는 ArrayList 혹은 배열 사용

구분 순차적으로 추가/제거 중간에 추가/제거 검색
ArrayList 빠르다 느리다 빠르다
LinkedList 느리다 빠르다 느리다

 

 

※ List 컬렉션의 주요 메소드

 

 

 

※ List의 전체 요소를 순회(traverse)하는 방법

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
public class ArrayListExam {
 
    public static void main(String[] args) {
        
        List<String> list = new ArrayList<>();
        
        list.add("Stirng_1");
        list.add("Stirng_2");
        list.add("Stirng_3");
        list.add("Stirng_4");
        list.add("Stirng_5");
 
        //-----------------------------------------------------//
        //         리스트의 전체 요소를 순회하는 방법들
        //-----------------------------------------------------//
        
        //1. method : 직접 for문과 리스트의 크기를 이용하여 순회(traverse)
        for(int i = 0 ; i < list.size(); i++) {          //전체 리스트의 요소 순
            String str = list.get(i);                    //해당 인덱스 번호의 구슬(객체) 얻기
            
            log.info(str);
        } //Classical for
        
        log.info("======================");
 
        //2. method : enhanced for문을 이용하는 방법(단, 인덱스 번호가 필요없을 때) 
        for(String s : list) {            //전체 리스트의 요소 순회
 
            log.info(s);
        } //enhanced for
         
        log.info("======================");
 
        //3-1. method : List.forEach() 최종처리 메소드를 이용한 순회
        //void accept(T t);
        list.forEach(t -> log.info(t));    //람다식을 구현하여 요소 출력
                
        log.info("======================");
 
        //3-2. method : List.forEach() 최소처리 메소드를 이용한 순회
       list.forEach(log::info);       //메소드 참조를 이용하여 요소 순회
 
        //-----------------------------------------------------//
        
    } //main
 
//end class
cs

 

 

관련글 더보기