ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JAVA 뽀개기) Collection - List에 대해 자세히 알아보자!
    프로그래밍 언어/Java 2023. 12. 13. 14:26

    이제 본격적으로 Collection의 한 종류인 List에 대해 설명하겠습니다.

     

    List에는 크게 3가지 종류가 있습니다.

    • ArrayList
    • LinkedList
    • Stack

    순서대로 다뤄보겠습니다.

    ArrayList

    기존 배열과 비슷한 List의 가장 큰 특징은 크기가 정해져 있지 않고 값을 계속 추가할 수 있습니다.

    기존 배열의 단점은 배열의 크기가 정해져있고 그 크기를 줄이거나 늘릴 수 없었는데,

    List는 굳이 그럴 필요가 없습니다.

    편의성 부분에서 기존 배열보다 압도적으로 사용하기 쉽습니다.

     

    사용하는 법

    // 선언 & 생성 (참조형 변수는 Integer를 사용하겠습니다. 필요에 따라 바꿀 수 있습니다.)
    ArrayList<Integer> intList = new ArrayList<>();
    
    // 초기화는 필요 없습니다!
    
    // 값 추가
    intList.add(1) // intList에 1이 추가됩니다.
    
    // 값 수정
    intList.set(0, 2) // 0번째 인덱스에 2를 바꿔 수정합니다.
    
    // 값 삭제
    intList.remove(0) // 0번째 인덱스에 있는 값을 삭제합니다.
    
    // 전체 출력
    intList.toString() // 전체 값이 대괄호[]로 묶어서 출력합니다.
    
    // 전체 제거
    intList.clear() // intList가 전체 삭제됩니다.

     

    LinkedList

    LinkedList는 메모리에 남는 공간을 요청해서 여기저기 나누어서 실제값을 담아놓고, 실제값이 있는 주소값으로 목록을 구성하고 저장합니다.

    기본적으로 ArrayList와 동일하지만 LinkedList는 값을 여기저기 나누어 담겨지기 때문에 조회하는 속도가 느립니다.

    하지만, 값을 중간에 추가하거나 삭제할 때는 속도가 빠릅니다. 

     

    여기서 문제!

    왜 값을 중간에 추가하는 기능은 ArrayList에 없을까요?

    왜 LinkedList는 값을 삭제하는게 속도가 빠를까요?

    어려운 질문은 아니지만 LinkedList에 대해 조금만 생각해보면 알아챌 수 있습니다.

     

    이제 어떻게 LinkedList를 사용하는지 알아봅시다.

    // 선언 & 생성 (참조형 변수는 Integer를 사용하겠습니다. 필요에 따라 바꿀 수 있습니다.)
    LinkedList<Integer> intLinkedList = new LinkedList<>();
    
    // 초기화는 필요 없습니다!
    
    // 값 추가
    intLinkedList.add(1) // intLinkedList에 1이 추가됩니다. intLinkedList = {1}
    
    // 값 중간에 추가 // ArrayList에는 없는 기능입니다.
    intLinkedList.add(0, 3) // 0번째 인덱스 3을 추가합니다. intLinkedList = {3, 1}
    
    // 값 수정
    intLinkedList.set(0, 2) // 0번째 인덱스에 2를 바꿔 수정합니다. intLinkedList = {2, 1}
    
    // 값 삭제
    intLinkedList.remove(0) // 0번째 인덱스에 있는 값을 삭제합니다. intLinkedList = {1}
    
    // 전체 출력
    intLinkedList.toString() // 전체 값이 대괄호[]로 묶어서 출력합니다.
    
    // 전체 제거
    intLinkedList.clear() // intLinkedList가 전체 삭제됩니다.

     

    Stack

    Stack은 상자에 쌓인 나무블럭을 넣었다가 빼서 조회하는 형식으로 데이터를 관리합니다.

    전문용어로 First-In-Last-Out 성질을 가집니다.

     

    다른 List들과는 다르게 값을 넣는 메서드 push(), 조회하는 메서드 peek(), 꺼내는 메서드 pop() 만 존재합니다.

    이렇게 제한되게 사용하는 이유는 최근 저장된 데이터를 순서대로 나열하고 싶거나 데이터의 중복처리를 막고 싶을때 사용합니다.

     

    Stack의 사용방법에 대해 알아봅시다.

    // 선언 & 생성 (참조형 변수는 Integer를 사용하겠습니다. 필요에 따라 바꿀 수 있습니다.)
    Stackk<Integer> intStack = new intStack<>();
    
    // 초기화는 필요 없습니다!
    
    // 값 추가
    intStack.push(1) // intStack에 1이 추가됩니다. intStack = {1}
    
    // 값 수정
    intStack.peek() // intStack의 맨 위값을 조회합니다.
    
    // 값 꺼내기(꺼내오면 삭제됩니다.)
    intLinkedList.pop(0) // intStack의 맨 위값을 꺼내옵니다. intStack = {}

     

    여기까지 List에 대한 설명이었습니다. 

    다음 포스팅은 Collection - Queue에 대해 알아보겠습니다.

Designed by Tistory.