티스토리 뷰

컬렉션 프레임웍(Collections Framework)

  • def: 데이터 그룹(群)을 저장하는 클래스들을 표준화한 것.

  • 크게 3타입이 존재한다.

    • List: 순서가 있는 데이터 집합
    • Set: 순서를 유지하지 않는 데이터 집합
    • Map: key와 value로 이루어진 데이터 집합
  • List와 Set은 공통점이 많아 추가적으로 Collection 인터페이스로 정의된다. (List와 Set이 Collection을 상속)

 

ArrayList

  • 기존의 배열과 다른 점

    • 배열의 사이즈는 초기화 시 고정되기 때문에 변경이 불가하다. 하지만 ArrayList는 동적이어서 사이즈를 선언하지 않고 원소를 유동적으로 add, remove할 수 있다.

    • 배열은 다차원이 가능하나 ArrayList는 불가하다.

      import java.util.*;
      
      class ArrayListEx1 {
          public static void main(String[] args) {
              int[] myArr = new int[3]; // 초기화 시 사이즈 고정
              myArr[0] = 100;
              myArr[7] = 100; // Err! ArraysOutOfBoundException
              
              ArrayList<Integer> myArrayList = new ArrayList<>();  // 사이즈 미할당
              myArrayList.add(1);  // 괄호 안에는 넣고자 하는 value
              myArrayList.add(2);
              myArrayList.add(3);
              myArrayList.add(4);
              myArrayList.remove(0); // 0번째 인덱스 값 삭제
              
      	    // traditional for문으로 ArrayList 출력
              for(int i = 0 ; i < myArrayList.size() ; i++) {
                  System.out.println(myArrayList.get(i));
              }
              
              // inhanced for문으로 ArrayList 출력
              for(int data : myArrayList) {
                  System.out.println(data);
              }
              
              // iterator로 ArrayList 출력
              iterator it = myArrayList.iterator(); 
              while(it.hasNext()) {
                  System.out.println(it.next()); 
              }
              
              // 배열 출력
              System.out.println(Arrays.toString(myArr)); // [100, 0, 0]
          }
      }
      
      
  • ArrayList의 몇가지 메서드

    • size()

      • 어레이리스트의 사이즈를 리턴(배열의 length 개념) 참고로 String 객체는 String.length();
    • add(i, v);

      • i번째 인덱스에 v 객체 추가한다
    • set(i, v);

      • i번째 인덱스에 있는 것을 v 객체로 변경
    • arrayList1.retainAll(arrayList2);

      • arrayList2와 공통적인 원소를 제외하고 제거
    • remove(i);

      • i번째 인덱스 제거
    • arrayList1.contains(arrayList2.get(i));

      • 해당 value를 갖고 있는지 아닌지 여부를 boolean으로 반환
    • arrayList.subList(a, b);

      • 자바스크립트 slice랑 같음. a번째 인덱스부터 b번째 인덱스 전까지 잘라서 리턴. 사이즈는 b-a. 참고로 String 객체는 substring(a, b);

 

LinkedList

  • LinkedList는 기존의 배열이 가지고 있는 단점들 - 크기를 변경할 수 없다, 비순차적 데이터 추가 및 삭제에 시간이 많이 걸린다 - 을 보완하기 위해 만들어졌다.

  • 배열이 연속적인 데이터를 갖고 있는 반면 링크드리스트는 불연속적인 데이터들을 연결(Link)한 형태이다.

  • 데이터 추가와 삭제가 빠르다.

    • 삭제할 때에는 삭제하고자 하는 요소 전의 요소가 기존의 요소가 아닌 다음 요소의 주소를 참조하게 하면 된다.
    • 추가하고자 할 때에는 새로운 요소를 생성한 다음 삽입하고자 하는 위치 이전의 요소가 새로운 요소 주소를 참조하게 하고, 새로운 요소가 다음 요소를 참조하게 하면 된다.
  • 더블 링크드 리스트

    • 링크드리스트는 이동방향이 단방향이기 때문에 다음 요소에 대한 접근은 쉽지만 이전 요소에 대한 접근은 어렵다. 이를 보완한 것이 더블 링크드 리스트(Doubly Linked List) 이다.
    • 기존 링크드 리스트는 다음 요소만 참조하나, 이에 더하여 이전 요소를 참조하도록 한 것이다.
    • 실제로 LinkedList클래스는 이름과 달리 링크드 리스트가 아닌 더블 링크드 리스트로 구현되어 있다.
  • 더블 서큘러 링크드 리스트(Doubly Circular Linked List)

    • 더블 링크드 리스트보다 연결성을 더 향상시킨 것으로, 더블 링크드 리스트의 첫번째 요소와 마지막 요소를 서로 연결시킨 것이다. 즉 마지막 요소의 다음 요소는 첫번째 요소이다.

 

+) ArrayList는 동적인 배열 느낌. LinkedList는 내가 알고 있는 리스트 같은 느낌.

'Java' 카테고리의 다른 글

스트림  (0) 2019.05.13
I/O programming  (0) 2019.05.13
인터페이스(Interface)  (0) 2019.05.12
여러 타입의 객체를 배열로 다루기(+ toString())  (0) 2019.05.12
Instanceof, 참조변수와 인스턴스의 연결  (0) 2019.05.12
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함