Java Collection Framework

김석진·2023년 3월 27일
0
post-custom-banner

Java Collection Framework란?

java collection framework란 다수의 요소를 하나의 그룹으로 묶어 효율적으로 저장하고 관리하는 기능을 제공하는 일종의 컨테이너이다
또한 java collection framework는 크기가 고정되어있지않고 가변적인 크기를 갖는다 또한 데이터 삽입, 탐색, 정렬 등 편리하게 사용 할 수 있는 것들을 많이 제공하고 있다

Java Collection Framework의 장점

다음은 Java Collection Framework의 장점이다

  1. 가변적인 저장 공간을 제공한다

배열은 가변적이지 않고 고정적인 저장 공간을 통해 데이터를 저장하는 반면에
Java Collection Framework는 공간에 제한 받지 않고 가변적인 공간을 제공한다 따라서 고정적인 크기가 넘어가면 더 이상 저장할수없는 배열 대신 Java Collection Framework를 많이 사용한다

  1. 프로그래밍하는 시간을 줄여준다

즉 이말은 우리가 자료구조, 알고리즘을 직접 짤 필요없이 라이브러리와 같이 직접 가져다가 상황에 맞게 쓰면 된다는 말이다

  1. 성능 향상

데이터 구조와 알고리즘의 고성능 구현을 제공하여 성능을 향상시킨다

Java Collection Framework의 상속 구조

Collection 인터페이스는 크게 List, Set, Queue로 크게 3가지 상위 인터페이스로 분류가 가능하고

List 종류 : LinkedList, Stack, Vector, ArrayList
Set 종류 : HashSet, SortedSet

Map은 Collection 인터페이스를 상속받고 있지 않지만 Collection으로 분류된다

예제

Java Collection Framework에는 총 3가지의 주요 컬렉션이 있다

List에서는 ArrayList, Vector 두가지 예제를 볼것이고
Set에서는 HashMap 하나만 예제를 볼것이다

  1. ArrayList
  2. Vector
  3. HashMap

우리는 이 3가지를 차례대로 볼것이다

ArrayList

ArrayList는 쉽게 말하면 배열인데 크기가 고정적이지 않고 가변적인 ArrayList이다

import java.util.ArrayList;
public class JavaCollection {
    public static void main(String[] args) {
        ArrayList<String> seokjin = new ArrayList<String>();
        // <>안에 저장될 데이터의 자료형을 쓴다

        seokjin.add("개뀰");
        seokjin.add("안녕");
        seokjin.add("헤헤");

        for(int i = 0; i < seokjin.size(); i++) {
            System.out.println(seokjin.get(i));
        }

    }

먼저 Java Collection Framework로 예제를 짜보았다
이런식으로 ArrayList를 만들고 <> 안에다가 저장될 데이터의 자료형을 쓴다

만약 배열이였다면 고정적인 크기를 정하고 그 크기 만큼 밖에 넣지 못하였겠지만

Java Collection Framework를 사용하면 크기에 제한 받지않고 값을 넣을수있다

Java Collection Framework는 아마 값이 얼마나 들어올지 예상하지 못할때 사용하면 좋을것같다

Vector

ArrayList와 동일한 구조를 가지며 배열의 크기가 늘어나고, 줄어듬에 따라서 자동으로 크기가 조절이 된다

import java.util.Vector;
public class JavaCollection {
    public static void main(String[] args) {
        Vector<String> seokjin = new Vector<String>();
        seokjin.add("헤헤");
        seokjin.add("안녕");
        seokjin.add(2, "이것은 김석진");
    }
}

다음은 vector이다 vector는 ArrayList와 똑같이 값을 집어넣을수있다
하지만 살짝 다른것이 있다면 내가 index를 지정해서 데이터를 추가할수있다는 점이다 또한 ArrayList와 다르게 null값도 받을수있다

근데 만약

[1, 2]
이렇게 있고 내가 index 1 부분에 추가를 하면 어떤식으로 반응할까?
바로 [1, 내가 추가, 2] 이런식을 추가가 되고 해당 index에 중복이 되어있는것은 한칸 밀리게 된다

HashMap

import java.util.HashMap;
public class JavaCollection {
    public static void main(String[] args) {
        HashMap<String, Integer> seokjin = new HashMap<>();

        seokjin.put("김석진", 200);
        seokjin.put("김석순", 210);

        System.out.println(seokjin.get("김석진"));
        System.out.println(seokjin.get("김석순"));
    }
}

hashmap은 좀 특이하게 key, value로 값이 저장된다

HashMap<key값의 자료형, value값의 자료형> seokjin = new HashMap<>();

HashMap은 선언할때 key, value 각각의 자료형을 넣어 선언하게 된다

그리고 HashMap의 특이한 점 두가지가 있다 바로

  1. 키는 중복을 허용하지 않지만, 값은 중복을 허용한다
  2. 요소의 저장 순서를 유지하지 않는다

이다 저장 순서를 어차피 key로 값을 찾는거니깐 내 생각에는 저장순서는 중요하지 않다고 생각한다

또한 key도 다른것과 중복이 된다면

  seokjin.put("김석진", 200);
  seokjin.put("김석진", 210);

  System.out.println(seokjin.get("김석진"));

이런식으로 나올때 무엇을 찾는건지 모를것이다 그럼으로 key를 유니크로 하는게 아닌가 싶다

이건 당연한거지..

마무리

편하노 !

profile
해탈의 경지에 이르자
post-custom-banner

0개의 댓글