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 |