티스토리 뷰

컬렉션 프레임워크(Collection Framework)

  • 인스턴스의 참조와 저장을 위해 잘 정의된 클래스들의 구조

  • (참고 : Java API문서에서는 컬렉션 프레임워크를 데이터 군(group)을 다루고 표현하기 위한 단일화된 구조(architecture)라고 정의하고 있다.)

  • 1. 컬렉션 프레임워크의 핵심 인터페이스 - List, Set, Map

    List 

    순서가 있는 데이터의 집합, 데이터의 중복을 허용한다.
    ex. 대기자 명단
    구현 클래스 : ArrayList, LinkedList, Stack, Vector 등

    Set

     순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용하지 않는다.
    ex. 양의 정수집합, 소수의 집합
    구현 클래스 : HashSet, TreeSet 등

    Map

    키(key)와 값(value)의 쌍으로 이루어진 데이터의 집합
    순서는 유지되지 않으며, 키는 중복을 허용하지 않고, 값은 중복을 허용한다.
    ex. 우편번호, 지역번호(전화번호)
    구현클래스 : HashMap, TreeMap, Hashtable, Properties 등

    • List, Map을 쓰면 여러개의 데이터를 한번에 리턴할 수 있다.

      1. 러면 반드시 하나의 타입으로만 보낼 수 있나요? 

        --> 아니다.

      2. 여러개의 타입이 들어있는 클래스를 만들면 된다. 하나의 클래스 안에 여러개의 타입들을 만들고 인스턴스를 제네릭 안에 넣어주면 된다.

     

    제네릭(Generic)

    • < Object Type >으로 정의되는 것인데, 데이터를 저장할 형식을 의미.

    • 제네릭에는 클래스 타입만 들어올 수 있고, 기본형은 넣을 수 없다.

    • 기본형을 한번 감싸서 참조형 변수로 만든 것 → wrapper class



    ex. int type의 List를 생성할 때는

              List<Integer> list = new ArrayList<Integer>();

     

    ex. Boolean type의 List를 생성할 때는

    List<Boolean> list = new ArrayList<Boolean>(); 



      List/ArrayList

      List/ArrayList는 가변길이를 지원하는 배열

      배열은 index의 갯수가 정해지면 절대 수정할 수 없지만, list/ arraylist는 index의 제한이 없는 배열이다.

      문법 :

      List<String> list = new ArrayList<String>();

      --> String type의 인스턴스를 List타입으로 저장하겠다는 의미. 

       메소드

      설명 

      void add(Object o)

      객체(element) 또는 컬렉션에 포함된 객체들을 추가한다. 

      void add(index, Object element)

      지정된 위치에 객체 또는 컬렉션에 포함된 객체들을 추가한다. 

      Object get(Object o)

      지정된 위치(index)에 있는 객체를 반환한다. 

      int indexOf(Object o)

      지정된 객체의 위치(index)를 반환한다.
      (List의 첫번째 요소부터 순방향으로 찾는다)

      int lastIndexOf(Object o)

      지정된 객체의 위치(index)를 반환한다.
      (List의 마지막 요소부터 역방향으로 찾는다.) 
      Object remove(int index) 

      지정된 위치(index)에 있는 객체를 삭제하고 삭제된 객체를 반환한다.

      Object set(int index, Object element)

      지정된 위치(index)에 객체(element)를 지정한다. 

      int size()

      Collection에 저장된 객체의 수를 반환한다. 

      boolean contains(Object o)

      지정된 객체(o) 가 Collection에 포함되어 있는지 확인한다. 

       

      • List는 향상된 for 문을 쓸 수 있다.

      • 다차원배열을 구현하기에는 복잡하다.


       

       

       

      HashMap<K,V>

      • - HashMap처럼 데이터를 키와 값의 형태로 저장하는 컬렉션 클래스는 지정해줘야할 타입이 두개이다.
             'K'는 Key의 줄이말로 어떤 집단에서 나라고 표현할 수 있는 고유한 값을 말한다.
             'V'는 Value의 줄임말로 그 값을 대표하는 것을 말한다. 
             - K나 V는 임의의 참조형 타입(reference type)을 의미한다.

        - HashMap은 중복키를 지원하지 않는다.(같은 키로 데이터를 집어넣으면, 마지막에 넣은 것으로 덮어씌운다

      문법

      Map<String, String> dictionary = new HashMap<String, String>();

       메소

      설명 

      void clear()

      Map의 모든 객체를 삭제한다. 

      boolean containsKey(Object key) 

      지정된 key객체와 일치하는 Map의 key객체가 있는지 확인한다.

      boolean containsValue(Object value)

      지정된 value객체와 일치하는 Map의 value객체가 있는지 확인한다. 

      Object get(Object key)

      지정한 key객체에 대응하는 value객체를 찾아서 반환한다. 

      boolean isEmpty()

      Map이 비어있는지 확인한다. 

      Object put(Object key, Object Value) 

      Map에 value객체를 key객체에 연결(mapping)하여 저장한다. 

      Object remove(Object key)

      key객체와 일치하는 key-value 객체를 삭제한다. 

      int size()

      Map에 저장된 key-value쌍의 개수를 반환한다. 


       


       Iterator

       컬렉션 클래스에 대해 iterator() 메서드를 호출하여 Iterator를 얻은 다음 반복문(주로 while문)을 사용해서 컬렉션 클래스의 요소들을 읽어올 수 있다.


      메소드 

      설명 

      boolean hasNext() 

      읽어올 요소가 남아있는지 확인한다. 있으면 true, 없으면 false를 반환한다. 

      Object next() 

      다음 요소를 읽어온다. next()를 호출하기 전에 hasNext()를 호출해서 읽어올 요소가 있는지 확인하는 것이 안전하다. 

      void remove()

      next()로 읽어온 요소를 삭제한다. next()를 호출한 다음에 remove()를 호출해야한다. 


      ArrayList에서 사용할 수 있고, HashMap에서는 키와 값을 쌍으로 저장하고 있기 때문에 iterator()를 직접 호출할 수 없고, 그대신 keySet()이나 entrySet()과 같은 메서드를 통해서 키와 값을 각각 따로 Set의 형태로 얻어온 후에 다시 iterator()를 호출해야 Iterator를 얻을 수 있다.


      1
      2
      3
      4
      5
      6
      7
      List list = new ArrayList();
       
      Iterator it = list.iterator();
       
      while(it.hasNext()){
          System.out.println(it.next());
      }
      cs

      iterator는 중간에 있는 데이터를 찾아오기가 어렵고, 반복을 돌리면서 처리를 할 것이다라고 한다면 iterator를 쓰는 것이 좋다!
      (실무에서는 거의 공식처럼 사용하고 있다고...)

       

     


    공지사항
    최근에 올라온 글
    최근에 달린 댓글
    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
    글 보관함