JAVA/기초공부

[JAVA] 컬렉션 (Collections)

SoU330 2024. 10. 13. 22:07

 

 

컬렉션(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);
        }
    }
}