JAVA

JAVA 컬렉션 프레임워크

테라시아 2024. 11. 16. 18:35

Collection Framework
(1) 개요
    코딩 중 객체(기본형 포함)을 여러 개를
    저장하고 꺼내쓰는 경우가 빈번
    => 가장 간단하게 구현한 것이 배열 []

    배열 선언 방법
        데이터타입[] 배열명 = new 데이터타입[개수];
        int[] scores = new int[5];

    배열은 전체 개수를 알고 있을 때는 사용이 편리
    모르고 있거나, 변경될 때
    - 매번 생성 시 1000개씩 만들자 => 공간 낭비
    - 배열에서 데이터를 지우면 그 공간은 빈 자리
    => 배열의 알려진 문제점 + 잘 알려진 구조
       데이터의 추가/삭제/검색이 편리하도록
       java.util 패키지 내에 여러 개의 IF와 클래스를 추가
    => 이를 컬렉션 프레임워크라 부른다.

(2) List
    - 객체를 일렬로 늘어놓은 구조
    - 객체를 인덱스로 관리
    - 객체를 저장하면 인덱스를 자동으로 부여
    - 인덱스로 객체 검색, 삭제, 변경 가능

    * 대표적인 리스트
    ArrayList, Vector, LinkedList

=> ListCollection.java    

(3) Set
    - 집합, 복주머니 속의 구슬
    - 중복을 허락하지 않음
    - 저장 순서를 보장하지 않음
    - 대표적인 클래스는 HashSet, TreeSet
    - 데이터 검색 속도가 매우 빠름
=> SetCollection.java

(4) Map
    - Key, Value로 구성된 Entry
    - {name}: {James}, {age}: 25
    - REST API 통신에서 사용하는 데이터 형태와 동일
    - Key는 중복저장 안됨, Value는 가능
    - 대표적인 클래스로 HashMap, TreeMap

 

☆ Code

 

★ ListCollection

import java.util.ArrayList;
import java.util.LinkedList;

public class ListCollection {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 1. ArrayList
		ArrayList ar = new ArrayList();
		
		// (1) 리스트에 요소 추가(add)
		ar.add("돈까스");
		ar.add("치킨까스");
		ar.add("쌀국수");
		ar.add("라면");
		System.out.println(ar);
		
		for(int i=0; i<ar.size(); i++) {
			System.out.println(i + " : " + ar.get(i));  // get(i) i에 해당하는 데이터 가져오기
		}
		
		// (2) 요소 삭제
		ar.remove(1);
		ar.remove("돈까스");
		System.out.println("[메뉴 2개 삭제 후] " + ar);
		
		// (3) 요소 변경
		ar.set(0, "스파게티");
		System.out.println("[메뉴 변경 후] " + ar);

		try {
			System.out.println("[메뉴 변경 후] " + ar.get(100));
		}
		catch(Exception e) {
			System.out.println("[메뉴 변경 후] " + "니가 직접 해먹어");
		}
		
		// (4) size() : 요소 개수 구하기
		System.out.println("총 메뉴 개수는 " + ar.size() + "개 입니다");
		
		// (5) contains() : 요소 있는지 알아보기(true, false)
		System.out.println("contains : 라면 있나요 - " + (ar.contains("라면")? "응":"아니"));
		System.out.println("contains : 돈까스 있나요 - " + ar.contains("돈까스"));
		
		// 2. LinkedList
		LinkedList link = new LinkedList();
		link.add("슬램덩크");
		link.add(0, "트위스터스");
		link.add(1, "사랑의하츄핑");
		System.out.println("LinkedList : " + link);
		
		// 3. Performance
		ArrayList app1 = new ArrayList();
		LinkedList app2 = new LinkedList();
		
		final int SAMPLE = 10000;
		for(int i=0; i<SAMPLE; i++) {
			app1.add(i);
			app2.add(i);
		}
		
		// read test
		long start, mid, end;
		start = System.currentTimeMillis();
		for(int i=0; i<SAMPLE; i++) {
			app1.get(i);
		}
		mid = System.currentTimeMillis();
		for(int i=0; i<SAMPLE; i++) {
			app2.get(i);
		}
		end = System.currentTimeMillis();
		
		System.out.println("***** Read Competition *****");
		System.out.println("ArrayList : " + (mid-start));
		System.out.println("LinkedList : " + (end-mid));
		
		// insert test
		start = System.currentTimeMillis();
		for(int i=0; i<SAMPLE; i++) {
			app1.add(7000, i);
		}
		mid = System.currentTimeMillis();
		for(int i=0; i<SAMPLE; i++) {
			app2.add(7000, i);
		}
		end = System.currentTimeMillis();
		
		System.out.println("***** Insert Competition *****");
		System.out.println("ArrayList : " + (mid-start));
		System.out.println("LinkedList : " + (end-mid));
	}

}

 

★ SetCollection

import java.util.HashSet;
import java.util.TreeSet;

public class SetCollection {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 1. HashSet
		HashSet hs = new HashSet();
		hs.add("매트릭스");
		hs.add("주글래살래");
		hs.add("쇼생크탈출");
		hs.add(new Puppy());
		System.out.println("HashSet : " + hs);
		
		// 2. TreeSet
		TreeSet ts = new TreeSet();
		ts.add("매트릭스");
		ts.add("주글래살래");
		ts.add("쇼생크탈출");
		ts.add("터미네이터");
		ts.add("다크나이트");
		System.out.println("TreeSet : " + ts);
		
		TreeSet subSet1 = (TreeSet)ts.subSet("매트릭스", "주글래살래");
		System.out.println("SubSet1 : " + subSet1);
		
		TreeSet subSet2 = (TreeSet)ts.subSet("매트릭스", true, "주글래살래", true);
		System.out.println("SubSet2 : " + subSet2);
		
		TreeSet subSet3 = (TreeSet)ts.subSet("매", "절");
		System.out.println("SubSet3 : " + subSet3);
		
		
	}
}

class Puppy {
	String name;
	int age;
}

 

★ HashCollection

import java.util.HashMap;
import java.util.Iterator;
import java.util.TreeMap;

public class MapCollection {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		HashMap<String, Integer> hm = new HashMap();  // <  > : Generic
		TreeMap<String, Integer> tm = new TreeMap();
		
		// (1) put() : 데이터 저장
		String[] food = {"Steak", "Chicken", "Rice", "Curri"};
		int[] price = {10000, 15000, 9000, 500};
		
		for(int i=0; i<food.length; i++) {
			hm.put(food[i], price[i]);
			tm.put(food[i], price[i]);
		}
		
		System.out.println("HashMap : " + hm);
		System.out.println("TreeMap : " + tm);
		
		// (2) get() : 데이터 조회
		System.out.println("Chicken : " + hm.get("Chicken"));
		
		// 모두 꺼내고 싶을 때
		// 1) Enhanced for
		for(String key : hm.keySet()) {
			System.out.println(key + " : " + hm.get(key));
		}
		
		// 2) Iterator()
		Iterator keys = tm.keySet().iterator();
		
		while(keys.hasNext()) {
			String key = (String)keys.next();
			System.out.println(key + " : " + tm.get(key));
		}
		
		// (3) remove(키값) : 데이터 삭제, replace(키값, Value) : 해당 키의 데이터를 Value로 변경
		hm.remove("Rice");
		hm.replace("Steak", 1000);
		System.out.println("New HM : " + hm);
	}

}

'JAVA' 카테고리의 다른 글

JAVA 람다  (0) 2024.11.17
JAVA 제네릭  (0) 2024.11.17
JAVA 예외  (2) 2024.11.16
JAVA base class  (3) 2024.11.15
JAVA 인터페이스  (2) 2024.11.15