본문 바로가기
Programming/Java

[자바/Java] Collection2 - 사용예제

by 코딩하는 랄로 2023. 10. 13.
728x90

저번 글에서는 자바 Collection 의 개념에 대해서 다루었다. 이번 글에서는 자바 Collection에 속해있는 해당 클래스들의 사용 예제를 다루면서 Collection의 사용법에 대해서 다루겠다.

 

https://codingralro.tistory.com/entry/%EC%9E%90%EB%B0%94Java-Collection1-%EA%B0%9C%EB%85%90

 

[자바/Java] Collection1 - 개념

컬렉션(collection)은 많은 데이터 요소를 효율적으로 관리하기 위한 자료구조를 말하며, ArrayList, LinkedList, HashMap 등이 여기에 포함된다. 그리고 이 컬렉션들은 제네릭(generics) 형식으로 구현되어 있

codingralro.tistory.com

 

 

 

List Inteface

 이 인터페이스는 정렬된 모든 객체 컬렉션을 저장할 수 있는 목록 데이터들을 다룬다. 리스트 인터페이스에는 ArrayList, Vector, Stack 등이 대표적으로 있다

 

 

ArrayList

동적 배열을 제공하는 클래스로서 표준 배열보다는 느릴 수 있지만 배열에서 많은 움직임이 필요한 프로그램에서는 유용하게 사용할 수 있는 컬렉션 클래스이다.

 

import java.io.*;
import java.util.*;
  
class GFG {
    public static void main(String[] args)
    {
  
        // ArrayList 선언
        ArrayList<Integer> al
            = new ArrayList<Integer>();
  
        // ArrayList에 데이터 입력
        for (int i = 1; i <= 5; i++)
            al.add(i); // Integer Wrapper Class로 auto boxing
  
        // 결과 출력
        System.out.println(al); // 1, 2, 3, 4, 5
  
        // 3번 데이터 제거
        al.remove(3);
  
        // 결과 출력
        System.out.println(al); // 1, 2, 3, 5
  
        // 하나씩 가져와서 결과 출력
        for (int i = 0; i < al.size(); i++)
            System.out.print(al.get(i) + " "); // 1 2 3 5
    }
}

 

 

LinkedList

 요소가 연속 된 위치에 저장되지 않고 모든 요소가 데이터 부분과 주소 부분이 있는 별도의 객체에 저장된다. 포인터와 주소를 사용해서 데이터를 가져온다.  각 요소를 노드라고 부른다.

 

import java.io.*;
import java.util.*;
  
class GFG {
    public static void main(String[] args)
    {
  
        // LinkedList 선언
        LinkedList<Integer> ll
            = new LinkedList<Integer>();
  
        // 값 입력
        for (int i = 1; i <= 5; i++)
            ll.add(i);
  
        // 결과 출력
        System.out.println(ll); // 1, 2, 3, 4, 5
  
        // 3번 데이터 삭제
        ll.remove(3);
  
        // 결과 출력
        System.out.println(ll); // 1, 2, 3, 5
  
        // 결과를 하나씩 출력
        for (int i = 0; i < ll.size(); i++)
            System.out.print(ll.get(i) + " ");  // 1 2 3 5
    }
}

 

 

Vector

동적 배열을 제공하고, 표준 배열보다 느리지만 많은 움직임이 필요한 프로그램에서 유용하다. ArrayList와 유사하다. 

하지만 차이점은 Vector는 동기화가 되고, ArrayList는 동기화가 되지 않는다는 것이다.

 

import java.io.*;
import java.util.*;
  
class GFG {
    public static void main(String[] args)
    {
  
        // Vector 선언
        Vector<Integer> v
            = new Vector<Integer>();
  
        // 데이터 입력
        for (int i = 1; i <= 5; i++)
            v.add(i);
  
        // 결과 출력
        System.out.println(v); // 1, 2, 3, 4, 5
  
        // 3번 데이터 삭제
        v.remove(3);
  
        // 결과 출력
        System.out.println(v); // 1,2, 3, 5
  
        // 하나씩 결과 출력
        for (int i = 0; i < v.size(); i++)
            System.out.print(v.get(i) + " ");  // 1 2 3 5 
    }
}

 

 

Stack

스택 클래스 모델 및 스택 데이터 구조를 구현할 때 주로 사용한다. LIFO(Last-In First-Out)을 기본 원칙으로 합니다

 

import java.util.*;
public class GFG {
    public static void main(String args[])
    {
        Stack<String> stack = new Stack<String>();
        stack.push("Hello");
        stack.push("World!");
        stack.push("Hello");
        stack.push("Hello");
  
        // Stack Iterator 선언
        Iterator<String> itr
            = stack.iterator();
  
        // 결과 출력
        while (itr.hasNext()) {
            System.out.print(itr.next() + " ");
        }
  
  		// Enter입력
        System.out.println();
  
  		// 후입선출
        stack.pop();
  
        // 재정의
        itr
            = stack.iterator();
  
        // 결과 출력
        while (itr.hasNext()) {
            System.out.print(itr.next() + " ");
        }
    }
}

 

 

 

Queue Interface

대기열 인터페이스라는 이름에서 알 수 있듯이 FIFO(FIrst-In First-Out)을 기본적으로 사용한다. 순서가 중요한 업무에서 주로 사용한다.

 

PriorityQueue, Deque, ArrayDeque 등과 같은 클래스가 있다

 

 

PriorityQueue

우선 순위에 따라 객체를 처리해야 할 때 사용한다. 기본적으로 min Heap으로 동작하여 작은 값부터 정렬된다. 즉, 하나씩 빼낸다면 오름차순으로  값이 빠진다.

 

import java.util.*;
  
class GfG {
    public static void main(String args[])
    {
        // 우선순위 큐 선언
        PriorityQueue<Integer> pQueue
            = new PriorityQueue<Integer>();
  
        // 데이터 입력
        pQueue.add(10);
        pQueue.add(20);
        pQueue.add(15);
  
        // 첫 번째 데이터 결과 출력
        System.out.println(pQueue.peek());
  
        // 오름차순하여 데이터 출력 -> 출력한 데이터는 제거된다
        System.out.println(pQueue.poll());
  
        // 두 번째 데이터 15 출력
        System.out.println(pQueue.peek());
    }
}

 

 

 

Deque Interface

큐 데이터 구조의 변형이다 양방향 큐라고도 불리고 양쪽 끝에서 요소를 추가하고 제거할 수 있는 구조이다

 

 

ArrayDeque

크기가 조정되는 배열이고 양쪽 끝에서 요소를 추가하고 제거하는 구조이다

 

import java.util.*;
public class ArrayDequeDemo {
    public static void main(String[] args)
    {
        // Deque 선언
        ArrayDeque<Integer> de_que
            = new ArrayDeque<Integer>(10);
  
        // 값 입력
        de_que.add(10);
        de_que.add(20);
        de_que.add(30);
        de_que.add(40);
        de_que.add(50);
  
  		// 결과 출력
        System.out.println(de_que);
  
        // deque초기화
        de_que.clear();
  
        // 첫 번째에 데이터 입력
        de_que.addFirst(564);
        de_que.addFirst(291);
  
        // 마지막에 데이터 입력
        de_que.addLast(24);
        de_que.addLast(14);
  
  		// 결과 출력
        System.out.println(de_que);
    }
}

 

 

 

Set Inteface

중복 값을 저장할 수 없는 정렬되지 않은 데이터 모음이다 중복을 방지하고 고유한 데이터만 저장해야하는 경우 사용된다.

HashSet, TreeSet, LinkedHashSet 등에서 사용됩니다

 

 

HashSet

HashSet에 입력되는 데이터는 동일한 순서로 삽입되는 것을 보장하지 않는다 이 클래스는 NULL 요소 삽입을 허용한다.

 

import java.util.*;
public class HashSetDemo {
    public static void main(String args[])
    {
        // HashSet 선언 및 데이터 입력
        HashSet<String> hs = new HashSet<String>();
  
        hs.add("Hello");
        hs.add("World");
        hs.add("Hello");
        hs.add("Blog");
        hs.add("CrazyKim");
  
        // Traversing elements
        Iterator<String> itr = hs.iterator();
        while (itr.hasNext()) {
            System.out.println(itr.next());
        }
    }
}

 

 

LinkedHashSet

HashSet과 유사하지만 차이점은 데이터를 저장하는 순서를 유지한다

 

import java.util.*;
public class LinkedHashSetDemo {
    public static void main(String args[])
    {
        // LinkedHashSet 선언 및 데이터 입력
        LinkedHashSet<String> lhs
            = new LinkedHashSet<String>();
  
        lhs.add("Hello");
        lhs.add("World");
        lhs.add("Hello");
        lhs.add("blog");
        lhs.add("CrazyKim");
  
        // 결과 출력
        Iterator<String> itr = lhs.iterator();
        while (itr.hasNext()) {
            System.out.println(itr.next());
        }
    }
}

 

 

Sorted Set Interface

et Interface와 유사하지만 순서를 정렬하는 메서드를 제공한다.

 

 

TreeSet

Tree를 사용하여 저장한다. 데이터의 순서는 자연적인 순서(오름차순)대로 유지된다.

 

import java.util.*;
public class TreeSetDemo {
    public static void main(String args[])
    {
        // TreeSet 변수 선언 및 데이터 입력
        TreeSet<String> ts
            = new TreeSet<String>();
  
        ts.add("Hello");
        ts.add("World");
        ts.add("Hello");
        ts.add("Blog");
        ts.add("CrazyKim");
  
        // Traversing elements
        Iterator<String> itr = ts.iterator();
        while (itr.hasNext()) {
            System.out.println(itr.next());
        }
    }
}

 

 

 

Map Interface

Map은 데이터를 키 - 값으로 매핑을 지원하는 데이터 구조이다. 동일한 키가 여러 개가 있을 수 없어 중복 키는 지원하지 않는다

 

Map Interface는 HashMap, TreeMap 등의 클래스가 있다.

 

 

HashMap

HashMap은 자바의 Map Interface의 기본적인 방법이다. 데이터를 키 - 값 형태로 저장을 한다.  HashMap의 데이터에 접근하려면 키를 알고 있어야 접근이 가능하다.

 

HashMap은 Hashing이라는 기술을 사용하는데 해싱은 인덱싱 및 검색 작업이 더 빨라지도록 키에 산술적인 연산을 적용하여 항목이 저장되어 있는 테이블의 주소를 계산하여 항목에 접근하는 방식이다.

 

import java.util.*;
public class HashMapDemo {
    public static void main(String args[])
    {
        // HashMap 선언 및 데이터 입력
        HashMap<Integer, String> hm
            = new HashMap<Integer, String>();
  
        hm.put(1, "Hello");
        hm.put(2, "World");
        hm.put(3, "CrazyKim");
  
        // 첫 번째 결과 출력
        System.out.println("Value for 1 is " + hm.get(1));
  
        // 전체 결과 출력
        for (Map.Entry<Integer, String> e : hm.entrySet())
            System.out.println(e.getKey() + " " + e.getValue());
    }
}

 

728x90

'Programming > Java' 카테고리의 다른 글

[자바/Java] lambda 개념 및 사용법  (0) 2023.10.14
[자바/Java] Inner 클래스  (0) 2023.10.14
[자바/Java] Collection1 - 개념  (1) 2023.10.13
[자바/Java] 제네릭(Generic)  (0) 2023.10.12
[자바/Java] Wrapper 클래스  (0) 2023.10.12