ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java | List_ArrayList & LinkedList & Vector
    JAVA/JAVA 2020. 2. 8. 17:39

    List

    순차적인 자료를 관리하는 데 사용하는 인터페이스
    요소의 중복을 허용함


    ArrayList

    객체 배열을 구현한 클래스
    컬렉션 인터페이스와 리스트 인터페이스를 구현

    객체 순서를 기반으로 순차적으로 자료를 관리하는 프로그램 구현시 사용

    • 요소의 개수에 따라 ArrayList의 크기가 자동으로 조정됨
    • 배열의 0번 인덱스부터 순서대로 요소가 저장됨
    • 동기화가 제공되지 않음
    • 내부적으로 데이터를 배열에서 관리하며 데이터 추가/삭제시 임시 배열을 생성해서 데이터를 복사함
    • 대량의 자료를 추가/삭제하는 경우 그만큼 데이터 복사가 일어나기 때문에 성능이 저하될 수 있음
    • 요소마다 인덱스를 가지고 있기 때문에 데이터 검색시에는 유리함

    ArrayList 생성

    ArrayList<E> 배열 이름 = new ArrayList<E>();

    ※ E: 제너릭 자료형, 해당 자료형의 데이터만 저장될 수 있도록 지정


    ArrayList 메소드

    메소드 설명
    boolean add(E e) 요소 하나를 배열에 추가, E는 요소의 자료형을 의미함
    void add(int index, E element) 배열의 index 위치에 element 요소 삽입
    int size() 배열에 저장된 요소의 전체 개수 반환
    E get(int index) index 위치의 요소 값 반환
    E set(int index, E element) index 위치의 요소 값을 element로 대체
    E remove(int index) 배열의 index 위치에 있는 요소 값 제거 후 해당 값 반환
    boolean isEmpty() 배열이 비어 있는지 확인, 비어있다면 true 반환

    예제

    package j200207;
    
    import java.util.*;
    
    public class ArrayListTest {
    
        public static void main(String[] args) {
    
            // List 구조 내부에 배열이 저장된 구조, 인덱스번호로 구분
            // String 형의 자료만 저장 가능
            ArrayList<String> list = new ArrayList<String>();
    
            // add(element), list 배열에 값 입력
            // 추가한 데이터는 앞에서부터 순서대로 저장됨
            list.add("포도");
            list.add("딸기");
            System.out.println(list);    // [포도, 딸기]
    
            // add(index, element), index 1에 "키위" 값 삽입
            list.add(1, "키위");
            System.out.println(list);    // [포도, 키위, 딸기]
    
            // set(index, element), index 0의 요소를 "복숭아"로 변경
            list.set(0, "복숭아");
            System.out.println(list);    // [복숭아, 키위, 딸기]
    
            // remove(index), index 2의 요소 삭제
            list.remove(2);
            System.out.println(list);    // [복숭아, 키위]
    
            // size(), list 내의 요소 개수 반환
            System.out.println(list.size());    // 2
    
            // get(index), index 위치의 값 반환
            for (int i = 0; i < list.size(); i++) {
                System.out.println(list.get(i));
            }
    
            // 확장 for문 사용 가능
            for (String s : list) {
                System.out.println(s);
            }
    
             /*
             복숭아
             키위
             */
    
        }
    
    }

    LinkedList

    LinkedList에 저장된 각 요소가 다음 요소의 주소 값을 가지는 배열 구조


    ArrayList와의 차이

    • 데이터 추가/삭제시 불필요한 데이터 복사가 없기 때문에 데이터 추가/삭제시 유리
      ∵ 이전 요소에서 가르킬 다음 요소의 주소 값만 변경하면 되기 때문
    • 데이터 검색시에는 처음부터 요소를 순회해야 하기 때문에 검색시에는 불리

    LinkedList 메소드

    메소드 설명
    void addFrist(E element) element를 리스트의 가장 앞에 삽입
    E removeLast() 리스트 가장 마지막 요소를 삭제하고 반환

    ※ 기본적인 메소드의 이름 및 기능은 ArrayList와 동일


    Vector

    ArrayList처럼 배열을 구현한 클래스

    멀티스레드 환경이 아니라면 ArrayList 사용을 권장


    ArrayList와의 차이

    • Vector는 동기화를 지원함
    • 메모리를 많이 차지함
    • 불러오는 속도가 더 느림

    Vector 메소드

    메소드 설명
    boolean add(E e) Element(요소)를 벡터의 끝에 추가함
    void addElement(E obj) 특정 객체를 벡터의 끝에 추가함
    E elementAt(int index) 해당 인덱스의 요소를 반환함
    List 인터페이스의 get(int) 메소드와 기능적으로 동일함
    void insertElement(E obj, int index) 해당 인덱스에 obj 요소를 삽입, 원래 해당 인덱스에 있던 값부터 인덱스가 뒤로 하나씩 밀림
    void setElement(E obj, int index) 해당 인덱스의 요소를 obj로 대체함(set)

    List 컬렉션을 구현한 리스트 클래스들에 대해 알아보았습니다.

    기본적인 구조는 비슷하지만 각 클래스마다 효율적으로 쓰일 수 있는 곳이 다르기 때문에

    클래스별 특성에 대해서는 알아두는 것이 좋을 것 같습니다.

    데이터를 검색할 필요가 있을 때는 ArrayList, 데이터를 저장하고 추가/삭제를 주로 하는 경우에는 LinkedList,

    멀티스레드 환경에서는 Vector를 사용하는 것이 적합하다고 할 수 있습니다.

    'JAVA > JAVA' 카테고리의 다른 글

    Java | Iterator & Enumeration  (0) 2020.02.08
    Java | Map_HashMap  (0) 2020.02.08
    Java | Collection Framework 컬렉션 프레임워크  (0) 2020.02.07
    Java | Wrapper Class  (0) 2020.02.07
    Java | I/O File Class  (0) 2020.02.07

    댓글

Designed by Tistory.