본문 바로가기
JAVA/기초공부

[JAVA] 컬렉션 (Collections)

by SoU330 2024. 10. 13.

 

 

컬렉션(Collection)

여러 개의 객체를 효율적으로 저장하고 처리하기 위한 객체의 그룹

자바 컬렉션 프레임워크는 이러한 컬렉션들을 다루기 위한 표준화된 API를 제공한다.

이를 통해 데이터의 저장, 검색, 삭제, 정렬 등의 작업을 편리하게 수행할 수 있다.

  • 인터페이스 - "이런 기능을 해야 한다" 라는 규칙만 정의한 틀
  • 구현 클래스 - 인터페이스에서 정의한 기능을 실제로 구현한 클래스
  • 유틸리티 클래스 - 공통적인 기능(정렬, 검색 등)을 모아 놓은 클래스

 

 

 

 

 

주요 인터페이스

Collection 인터페이스

모든 컬렉션의 기본이 되는 인터페이스

하위 인터페이스들과 그 구현체들이 지켜야 하는 기본적인 메서드들 정의

 

List

순서가 있는 데이터의 집합

중복된 요소를 혀용하며 인덱스를 통해 요소에 접근할 수 있다.

구현 클래스 : ArrayList, LinkedList, Vector, Stack

 

Set

순서가 없으며 중복을 허용하지 않는 집합

구현 클래스 : HashSet, LinkedHashSet, TreeSet

 

Queue

FIFO 방식으로 데이터를 처리하는 인터페이스

주로 대기열 구조를 구현할 때 사용

구현 클래스 : LinkedList, PriorityQueue

 

Map

키와 값의 쌍으로 이루어진 데이터를 다루는 인터페이스

키는 중복될 수 없고 값은 중복이 허용된다.

구현 클래스 : HashMap, LinkedHashMap, TreeMap, Hashtable

 

Iterator

컬렉션에 저장된 요소들을 하나씩 순차적으로 접근할 수 있게 해주는 도구

hasNext() : 컬력션의 다음 요소가 있는지 확인하는 메서드

next() : 현재 가리키는 요소를 반환하고, 다음 요소로 이동

remove() : 현재 가리키고 있는 요소를 컬렉션에서 제거

 

 

 

 

 

 

 

주요 구현 클래스

각 인터페이스에는 다양한 구현체가 존재하며 각 구현체는 특정 상황에서 효율적인 방식으로 데이터를 처리한다.

 

ArrayList : 크기가 가변하는 배열로 인덱스를 통한 빠른 조회가 가능하다.

LinkedList : 양방향 연결 리스트로 삽입 및 삭제가 빈번한 경우 효율적이다.

HashSet : 내부적으로 해시맵을 사용하여 중복된 요소를 허용하지 않으며 빠른 검색을 제공한다.

HashMap : 키와 값을 해시맵으로 관리하여 빠른 검색, 삽입, 삭제가 가능하다.

 

 

 

 

 

vector 클래스 예제

import java.util.Iterator;
import java.util.Vector;

public class VectorTest_01 {
    public static Vector <Integer> vec;
    public static void main(String[] args) {
        vec = new Vector <Integer>();

        // 백터에 데이터 3개 삽입
        vec.add(100);
        vec.add(200);
        vec.add(300);
        vecInfoList("삽입된 벡터 값 출력");
        System.out.printf("요소의 개수 : %d\n",vec.size());
        vec.add(400);
        vec.add(500);
        vecInfoList("추가된 후 벡터 값 출력");
        System.out.printf("요소의 개수 : %d\n",vec.size());
        vec.remove(2);
        vecInfoList("삭제된 다음 벡터 값 출력");
        System.out.printf("요소의 개수 : %d\n",vec.size());
    }

    private static void vecInfoList(String prtStr) {
        System.out.println(prtStr);
        int i = 0;
        Iterator <Integer> it = vec.iterator();
        while(it.hasNext()) {
            System.out.printf("vec [%d]번 째 값 = %d\n",i,it.next());
            i++;
        }

    }
}

 

 

 

 

 

ArrayList 클래스 사용 예제

import java.util.ArrayList;

public class ArrayListTest_01 {
    public static ArrayList <Integer> list = new ArrayList<Integer>();
    public static void main(String[] args){
        for (int i=0; i<5; i++) {
            list.add(i);
        }

        prtList("List에 입력된 내용");

        list.remove(2);
        prtList("List에서 2번째 요소 삭제");

        list.add(2,13);
        prtList("List에서 2번째 요소에 13 삽입");

        list.set(4,1000);
        prtList("List에서 4번째 요소를 1000으로 수정");

    }

    public static void prtList(String s) {
        System.out.println(s);
        for(Integer it : list) {
            System.out.printf("%d  ",it);
        }
        System.out.println();
    }
}

 

 

 

 

LinkedList 클래스 사용예제

ListIterator <MenInfo> it = lec.listIterator();

int i = 0;
while(it.hasNext()) {
    MenInfo s = (MenInfo) it.next();
    System.out.printf("[%d] %s\n",i,s);
    i++;
}
System.out.printf("요소의 개수 : %d\n",lec.size());

lec.remove(ms[2]);
ListIterator<MenInfo> et = lec.listIterator(lec.size());
i = lec.size();
while(et.hasPrevious()){
    MenInfo s = (MenInfo)et.previous();
    System.out.printf("[%d] %s\n",i,s);
    i--;
}
System.out.printf("요소의 개수 : %d\n",lec.size());

 

 

 

 

 

Stack 클래스 사용 예제

import java.util.Stack;

public class StackTest_03 {
    public static void main(String[] args) {
        Stack <Object> stack = new Stack<Object>();

        stack.push(100);
        stack.push("포도");
        stack.push('A');
        stack.push(true);
        stack.push(-23.33);

        int i = stack.size();
        while(!stack.empty()){
            System.out.printf("stack[%d] = %s\n",i,stack.pop());
            i--;
        }
    }
}

 

 

 

 

 

HashTable 클래스 사용 예제

import java.util.Enumeration;
import java.util.Hashtable;

public class HashTest_02 {
    public static void main(String[] args) {
        Hashtable <String,Integer> ht = new Hashtable<String, Integer>();

        ht.put("년",2000);
        ht.put("월",3);
        ht.put("일",30);
        ht.put("시",0);
        ht.put("분",3);

        System.out.println("년 : " + ht.get("년"));
        System.out.println("월 : " + ht.get("월"));
        System.out.println("일 : " + ht.get("일"));
        System.out.println("시 : " + ht.get("시"));
        System.out.println("분 : " + ht.get("분"));

        // 키 출력
        Enumeration<String> hsKey = ht.keys();
        while(hsKey.hasMoreElements()) {
            String keys = hsKey.nextElement();
            System.out.println(keys);
        }

        // 값 출력
        Enumeration<Integer> hsVal = ht.elements();
        while(hsVal.hasMoreElements()) {
            Integer values = hsVal.nextElement();
            System.out.println(values);
        }
    }
}