- 컬렉션 (Collection) : 여러 객체(데이터)를 모아 놓은 것을 의미
- 프레임워크 (Framework) : 표준화, 정형화된 체계적인 프로그래밍 방식
List | Set | Map | |
---|---|---|---|
관리 | 목록 관리 | 집합 관리 | 데이터를 쌍으로 관리 |
순서 여부 | O | X (주머니에서 랜덤으로 꺼내서 사용) | X (Entry별로 저장 (key값 : Value값)) |
배열 대신 사용 | 교집합 / 합집합 / 차집합 등 | Value : 데이터 | |
요소 | 요소 추가 / 삭제 / 수정 | 요소 추가 / 삭제 / 수정 | 요소 추가 / 삭제 / 수정 |
중복값 여부 | O | X | key : X / value : O |
종류 | Vector, ArrayList, LinkedList, Stack, Queue | HashSet, TreeSet | HashMap, TreeMap, HashTable, Properties |
<E>
주요 메소드 - 순서O, 중복O <E>
주요 메소드 - 순서X, 중복X <K,V>
주요 메소드 - 순서X, 중복(키X,값O)<String>
< >
안에 데이터 타입 기재List<String> list = new ArrayList<String>();
List<String> list = Arrays.asList("일", "월", "화", "목");
Arrays.asList(String... a)
: 값이 여러개Arrays.asList(String a)
: 값이 1개add(값)
add(index, "값")
List<String> list = new ArrayList<String>();
list.add("월");
list.add("화");
list.add(2, "수");
list.add(0, "일");
// [일, 월, 화, 수]
2가지 방법이 있다.
1. boolean remove(Object obj)
: obj 제거. 성공하면 true반환
2. Object remove(int index)
: index위치의 요소 제거. 제거한 요소를 반환
List<String> list = new ArrayList<String> (Arrays.asList("일", "월", "화", "수"));
list.remove(0); // [월, 화, 수]
list.remove("화"); // [월, 수]
System.out.println(list);
List<String> list = new ArrayList<String> (Arrays.asList("월", "화", "수"));
list.set(0, "일");
System.out.println(list); // [일, 화, 수]
배열은 length를 이용하여 배열의 길이를 구하지만, ArrayList는 size( )를 이용해서 길이를 구한다.
List<String> list = Arrays.asList("일", "월", "화", "수");
int size = list.size();
System.out.println(size); // 4
List<Integer> list = new ArrayList<Integer> ();
boolean result = list.isEmpty(); // true
넣은 요소를 모두 제거하기 위해서는 clear()
를 사용하면 된다.
List<String> list = Arrays.asList("일", "월", "화", "수");
list.clear();
배열을 출력할 때 인덱스 값이 있기 때문에 인덱스의 i를 이용하여 for문을 이용하여 아래와 같이 출력했었다.
String arr[] = {"일", "월", "화", "수"};
for(int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " "); // 일 월 화 수
}
List<String> list = Arrays.asList("일", "월", "화", "수");
for(int i = 0, length = list.size(); i < length; i++) {
System.out.print(list.get(i) + " "); // 일 월 화 수
}
List<String> list = Arrays.asList("일", "월", "화", "수");
for(String element : list) {
System.out.print(element + " ");
}
제네릭 (Generic) 장점
타입 | 설명 |
---|---|
<T> | Type |
<E> | Element |
<K> | Key |
<V> | Value |
<N> | Number |
종류
int a = Integer.parseInt("5");
long b = Long.parseLong("10");
double c = Double.parseDouble("1.5");
Integer a1 = Integer.valueOf(5);
Long b1 = Long.valueOf(10);
Double c1 = Double.valueOf(1.5);
Integer a2 = Integer.valueOf("5");
Long b2 = Long.valueOf("10");
Double c2 = Double.valueOf("1.5");
int a = a1.intValue();
long b = b1.longValue();
double c = c1.doubleValue();
기본 타입 → Wrapper 클래스 타입
Wrapper 클래스 타입 → 기본 타입
public class AutoBoxing {
public static void main(String[] args) {
Integer a = 10; // Auto Boxing
int b = a + 5; // Auto UnBoxing
System.out.println(a); // 10
System.out.println(b); // 15
}
}
public class Object {
public native int hashCode( ); // 객체의 주소를 int로 변환해서 반환
String str1 = new String("aaa");
String str2 = new String("aaa");
System.out.println(str1.equals(str2)); // true
System.out.println(str1.hashCode()); // 96354
System.out.println(str2.hashCode()); // 96354
Set<String> set = new HashSet<String>();
값을 지정할 때 ArrayList와 같이 Arrays.asList( )
메소드를 활용한다.
Set<String> set = new HashSet<String>(Arrays.asList("일","월","화","수"));
Set<String> set = new HashSet<String>();
set.add("일");
set.add("월");
set.add("화");
set.add("수");
set.add("수"); // 중복저장 시도
// [일, 월, 화, 수 ]
Hash는 중복 허용하지 않는다.
remove( )
clear()
사용하면 된다.Set<String> set = new HashSet<String>();
set.add("일");
set.add("월");
set.add("화");
set.add("수");
set.add("목");
boolean result = set.remove("목");
System.out.println(result); // true
제거할 값이 존재하지 않는다면 false
를 출력하고 제거되지 않는다.
ArrayList와 똑같이 size( )
메소드를 사용한다.
Set<String> set = new HashSet<String>(Arrays.asList("월","화","수"));
int size = set.size(); // 3
HashSet은 인덱스가 존재하지 않고, 비순차적이라 일반 for문을 사용할 수 없다.
Set<String> set = new HashSet<String>(Arrays.asList("월","화","수"));
for(String element : set) {
System.out.println(element); // [ 월, 화, 수 ]
}
HashSet 집합
Set<Integer> set1 = new HashSet<Integer>(Arrays.asList(1, 2, 3, 4, 5));
Set<Integer> set2 = new HashSet<Integer>(Arrays.asList(3, 4, 5, 6, 7));
Set<Integer> set3 = new HashSet<Integer>(Arrays.asList(6, 7));
set1.addAll(set2); // [1, 2, 3, 4, 5, 6, 7]
set1.removeAll(set2); // [1, 2]
set1.retainAll(set2); // [3, 4, 5]
boolean result1 = set1.containsAll(set3);
boolean result2 = set2.containsAll(set3);
System.out.println(result1); // false
System.out.println(result2); // true
Entry = Key : Value
<Object>
는 모든 데이터 타입을 받을 수 있다.Map<String, String> map1 = new HashMap<String, String>();
// 또는
Map<String, Object> map2 = new HashMap<String, Object>();
put( )
을 통해 요소 추가한다.Map<String, Object> map = new HashMap<String, Object>();
map.put("title", "소나기");
map.put("author", "황순원");
map.put("price", 20000);
Map<String, String> dictionary = new HashMap<String, String>() ;
dictionary.put("apple", "사과"); // put(key, value)
dictionary.put("mango", "망고");
dictionary.put("melon", "멜론");
// 수정
// 기존의 key값을 사용하면 수정
dictionary.put("melon", "메론");
melon
key의 값은 메론
으로 수정되었다.
String removeItem = dictionary.remove("mango");
System.out.println(removeItem); // 망고
Map<String, Object> map = new HashMap<String, Object>();
map.put("title", "아몬드");
map.put("author", "손원평");
map.put("price", 18000);
for(Map.Entry<String, Object> entry : map.entrySet()) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
// author : 손원평
// price : 18000
// title : 아몬드
Entry를 기준으로 순회하는 방법 말고도 key를 이용해 순회하는 방법도 있다.
Map<String, Object> map = new HashMap<String, Object>();
map.put("title", "아몬드");
map.put("author", "손원평");
map.put("price", 18000);
for(String key : map.keySet()) {
System.out.println(Key + " : " + map.get(key));
}
// author : 손원평
// price : 18000
// title : 아몬드
Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("title", "summer");
map1.put("author", "hisahisijo");
map1.put("price", 10000);
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("title", "어린왕자");
map2.put("author", "생택쥐베리");
map2.put("price", 12000);
Map<String, Object> map3 = new HashMap<String, Object>();
map3.put("title", "홍길동전");
map3.put("author", "허균");
map3.put("price", 16000);
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
list.add(map1);
list.add(map2);
list.add(map3);
for(Map<String, Object> map : list) { // List
for(Map.Entry<String, Object> entry : map.entrySet()) { // Map
System.out.println(entry.getKey() + ":" + entry.getValue());
}
System.out.println();
}
이진트리 (Binary Tree)
TreeMap
선언하는 방법은 부모 Map을 선언하고, TreeMap 객체를 생성한다.
Map<Integer, String> map = new TreeMap<Integer, String>();
put()
를 이용해서 요소를 추가map.put(65, "수영");
map.put(85, "윤아");
map.put(35, "태연");
map.put(95, "서현");
// {35=태연, 65=수영, 85=윤아, 95=서현}
TreeMap도 Map이므로 Entry 단위로 for 순회를 할 수 있다.
for(Map.Entry<Integer, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
NavigableMap<K, V>
: 지정된 검색 대상에 대해 가장 근접한 일치 항목을 반환하는 탐색 메서드와 함께 확장된 정렬된 map이다.SortedMap<K, V>
인터페이스를 상속하는 인터페이스이다.// 생성중요
TreeMap<Integer, String> map = new TreeMap<Integer, String>();
map.put(65, "수영");
map.put(85, "윤아");
map.put(35, "태연");
map.put(95, "서현");
NavigableMap<Integer, String> map2 = map.descendingMap();
for(Map.Entry<Integer, String> entry : map2.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
// 95 : 서현
// 85 : 윤아
// 65 : 수영
// 35 : 태연
// 다시 decendingMap() 메소드를 호출하면 오름차순 정렬이 된다.
NavigableMap<Integer, String> map3 = map2.descendingMap();
// key값으로 순회
for(Integer key : map3.keySet()) {
System.out.println(key + ":" + map3.get(key));
}
}