My Profile Photo

DongChanS's blog


수학과 학생의 개발일지


Java (6) - Java Collections API

1) Collection API

1-1. Set

순서없이 저장하고, 같은 데이터(equals(), hashcode() 비교시)는 무시됨

  • HashSet : 같은 내용의 객체를 hashCode()가 같을 경우 같다고 인정함.

  • TreeSet : 트리구조를 이용하여 객체들을 정렬해서 관리함.

    임포트하기

    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.Collection;
    

    사용예제

    • 저장했다가 다시 꺼내면 Object 타입으로 리턴되므로 (Primitive data type이 아님!)

      저장할 데이터의 타입을 명시해두는게 좋음.

    public static void main(String[] args){
        Collection<Integer> list = new HashSet();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(1);
          
        // 방법1 (Integer라고만 해야함)
        Iterator<Integer> i = list.iterator();
        while(i.hasNext()){
            System.out.print(i.next());
        }
        System.out.println();
          
        // (추천!) 방법2 (int라고 해도 됨)
        for(Integer num: list){
            System.out.print(num);
        }
    }
    
    1 2 3 
    1 2 3 
    

1-2. List

  • Resizable-array implementation of the List interface.
    1. 모든 element를 허용함.
    2. Constant time performance (size, isEmpty, get, set, iterator)
    3. 초기에 Capacity를 설정하는데, 원소가 쌓이면서 자동으로 커짐.
    4. Multilple threads access an ArrayList instance concurrently

사용예제

public static void main(String[] args){
    Collection<String> al = new ArrayList<>();
    al.add("a");
    al.add("b");
    al.add("c");
    al.add("d");

    for (String st : al){
        System.out.print(st+" ");
    }
    System.out.println();
    System.out.println(al.toArray()[3]);
}
a b c d 
d

al.get(3)이 된다고 들었는데.. 이상하게 안되서 그냥 toArray()를 사용해서 array로 바꿨습니다.

1-3. Map

데이터 저장, 관리시에 검색을 쉽게하기 위해서 구현된 클래스

파이썬의 딕셔너리와 비슷한듯?

  • TreeMap : Red-black tree를 기반으로 한 맵이다.

    • Comparator를 기반으로 하여 key를 정렬해서 저장함.

      Log(n) time performance (constinsKey, get, put, remove)

  • HashMap : Hash table을 기반으로 한 맵 인터페이스

    • null value와 null key를 허용함, 정렬기능은 없음

      Constant time performance (get, put)

    • HashMap(capacity, loadFactor)

      capacity : number of bucket

      load factor : hashmap이 동적할당하기 위한 민감도(?)

      => 특정 크기를 초과하면 2배의 크기로 다시 할당함.

사용예제

public static void main(String[] args){
        Map<String, Integer> hm = new HashMap<String, Integer>();
        hm.put("Dongchan",100);
        hm.put("Excellent",90);
        hm.put("Good",80);
        hm.put("Satisfied",70);
        // 키로 가져오기
        System.out.println(hm.get("Good"));
        // iterator를 통해서 가져오기
        Iterator<String> i = hm.keySet().iterator();
        // for문을 통해서 가져오기
        for(Integer num:hm.values()){
            System.out.print(num+" ");
        }
        System.out.println();
    }
80
90 100 70 80 
comments powered by Disqus