[Java] 1.컬렉션

컬렉션 프레임워크

여러 객체를 담을 수 있는 자료구조

collection

Set

순서가 없는 컬렉션

HashSet

사용 예제

public static void main(String[] args) {
    HashSet<String> set = new HashSet<>();
    set.add("Hello");
    set.add("World");
    set.add("Hello");
    System.out.println(set);
}

Iterator 사용 예제

public static void main(String[] args) {
    HashSet<String> set = new HashSet<>();
    set.add("Hello");
    set.add("World");
    
    Iterator<String> iter = set.iterator();
    while (iter.hasNext()) {
        System.out.println(iter.next());
    }
}

TreeSet

정렬 추가

사용 방법 HashSet과 동일

Comparable 인터페이스를 구현하여 public int compareTo(T t) 메서드를 오버라이딩 해준다.

List

순서가 있는 컬렉션

ArrayList

내부적으로 데이터를 배열에서 관리한다.

자료를 추가/삭제 할 경우 그 다음 인덱스부터 데이터 복사가 일어나 성능 저하 이슈가 있으나, 인덱스를 통한 참조가 가능하여 검색에 유리

사용 예제

public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<>();
    list.add("Hello");
    list.add("World");
    for (String str : list) {
        System.out.println(str);
    }
}

LinkedList

사용 방법 ArrayList와 동일

내부적으로 연결리스트를 사용하기 때문에 데이터의 추가/삭제 시 불필요한 복사가 없어 성능 저하가 없는 반면, 데이터 검색 시 처음부터 노드를 순회해야 하기 때문에 성능 이슈가 있음

Vector

사용 방법 동일

것보다 같은 인터페이스를 구현했는데 당연히 같아야지.. 굳이 왜 쓰고 있었지..

필요에 따라 크기를 동적으로 조절 할 수 있는 배열이며, 스레드 동기화 작업이 되어있어 한번에 하나의 스레드만 벡터를 사용 할 수 있다. 따라서 ArrayList보단 느리다.

Map

키-값 쌍의 순서가 없는 컬렉션, 키 중복이 불가능

HashMap<K, V>

public static void main(String[] args) {
    HashMap<String, String> map = new HashMap<>();
    map.put("key1", "value1");
    map.put("key2", "value2");
    
    Set<String> keys = map.keySet();
    for (String key : keys) {
        String value = map.get(key);
        System.out.println(value);
    }
}

TreeMap<K, V>

정렬 기능 추가

기타 등등..