[JAVA] Collections Framework

Posted by 신희준 on August 27, 2017

2017 - 08 - 27 (일)


참고 도서 : 자바의 정석(남궁성 저, 도우출판)


Collections Framework



다수의 데이터(Collections), 즉 데이터 그룹을 저장하는 클래스들을 표준화한 프로그래밍 방식
컬렉션 프레임워크는 크게 3가지 타입의 인터페이스로 나뉜다. ( List , Set , Map )

Collections Framework 상속계층도


Post Sample Image

- List 인터페이스 : 순서가 있는 데이터의 집합으로 데이터의 중복을 허용한다.
구현클래스 : ArrayList, LinkedList, Stack, Vector

- Set 인터페이스 : 순서를 유지하지 않는 데이터의 집합으로 데이터의 중복을 허용하지 않는다.
구현클래스 : HashSet, TreeSet

- Map 인터페이스 : 키와 값의 쌍으로 이루어진 데이터의 집합으로 순서를 유지하지 않으며 키의 중복은 허용하지 않지만 데이터의 중복은 허용한다.
구현클래스 : HashMap, TreeMap, HashTable, Properties


Iterator

- 컬렉션 클래스에 저장된 요소들을 나열하는 방법을 제공한다.
- 컬렉션 클래스의 iterator()를 호출해서 사용.
- iterator 는 일회성이며 읽는 도중에 컬렉션 변경이 불가하다.


  List list = new ArrayList(); // ArrayList 한개를 생성
  Iterator it = list.iterator();
  //list 객체의 조상인 collection클래스의 iterator()메소드호출
  while(it.hasNext()){  
      System.out.println(it.next());
  } //.next()로 읽어옴

  • List

    • ArrayList, LinkedList

      • ArrayList의 경우 스택구조로 되어있기에 중간의 데이터를 삭제하거나 추가할 경우 성능상의 단점을 가진다.

      • LinkedList는 중간에 데이터를 삭제/추가하는 작업에 있어서 성능이 비교적 좋다.(Queue)

  • Set

    • HashSet

      • Set은 중복을 허용하지 않는다. 만일 add() 를 통해 중복된 데이터값을 넣는다면 False 가 반환되면서 저장을 실패할 것이다.

      • 중복저장을 허용하지 않고자 할 경우 Set을 활용하면 편할 것이다.

      
      Object[] obj = {6,7,1,4,6,2,4,11,3,4};
    Set set = new HashSet();
      
    for(int i =0; i <obj.length; i ++){
        set.add(obj[i]);
    }
    // List의 인스턴스 list에 set을 넣는다.
    List list = new LinkedList(set);
    // Collections 의 sort() 메소드로 간단히 list를 정렬한다.
    Collections.sort(list); 
    System.out.print(list);  
    // {1,2,3,4,6,7,11} 이 출력될 것이다. 중복되는 값을 제거한다.
      
    
  • TreeSet

    • TreeSet은 이진 검색 트리라는 자료구조 형태로 데이터를 저장하는 클래스이다.

      • TreeSet도 Set의 성격인 중복저장 불허, 순서유지 x 를 가지고 있다.

      • TreeSet은 저장할 때 이미 정렬하기 때문에 읽어올 때 따로 정렬할 필요가 없다.

      
    class TreeLotto{
        public static void main(String args[]){
            Set set = new TreeSet();
            for(int i =0; set.size()<6 ; i ++){
                int num = (int)(Math.random()*45) +1; // 1~45까지의 랜덤숫자를 num 변수에 넣는다.
                set.add(num);
            }
            System.out.print(set); // 실행결과 {5,7,24,31,33,35} 랜덤숫자가 자동으로 정렬해서 출력
        }
    }
      
    
    • TreeSet의 subset() 메서드
      
    class TreeDictionary{
        public static void main(String args[]){
            Set set = new TreeSet();
            set.add("apple");
            set.add("banana");
            set.add("car");
            set.add("dragon");
            set.add("egg");
            String from = "a";
            String to = "c";
            System.out.println(from+"으로 시작하는 단어부터"+to+"로 시작하는 단어까지 검색"+set.subSet(from,to)); //a로 시작하는 단어부터 c로시작하는 단어를 검색해서 자른다.
        }
    }
      
    
  • Map

    • HashMap

      • key : value 형태의 자료형을 저장한다.

      • key 값의 중복은 허용하지 않지만 value의 중복은 허용한다.

      • HashMap은 해싱을 사용하기 때문에 많은 양의 데이터를 검색하는데 있어서 뛰어난 성능을 가진다.

  • TreeMap

    • TreeMap 은 TreeSet 처럼 이진검색트리 형태로 되어있으면서 Map의 성질을 가진다.

    • HashMap이 TreeMap 보다 검색성능이 더 좋다고 하여 HashMap을 사용하는게 낫다고 하지만 범위검색 및 정렬검색의 경우 TreeMap의 성능이 더 우수하다.