배열의 한계
배열은 몇 개의 방이 필요한지 알고 있어야 사용할 수 있다.
String[] arrayObj = new String[2];
arrayObj[0] = "one";
arrayObk[1] = "two";
arrayObj[2] = "three"; // 오류 발생
ArrayList
몇개의 값을 넣을지 지정하지 않아도 된다.
add Method는 어떤 형태의 매개변수도 받을 수 있음
- add는 Object라는 매개변수 데이터 형을 가짐.
- get으로 가져올 때는 형변환이 필요
- Generic을 사용하면 형변환 불필요
import java.util.ArrayList;
ArrayList al = new ArrayList();
al.add("one");
al.add("two");
al.add("three");
for(int i=0; i < al.size(); i++){
String value = (String)al.get(i);
System.out.println(value);
}
// Generic 사용
ArrayList<String> al = new ArrayList<String>();
String value = al.get(i); // 형변환 불 필요
System.out.println(value);
컬렉션즈 프레임워크란?
Collection, Map 이라는 가장 큰 카테고리가 있음.
Set은 중복을 허락하지 않음. List는 중복을 허락.
Collection
- Set
- HashSet
- LinkedHashSet
- TreeSet
- List
- ArrayList
- Vector
- LinkedList
- Queue
- PriorityQueue
- Set
Map
- SortedMap
- TreeMap
- Hashtable
- LinkedHashMap
- HashMap
- SortedMap
List와 Set의 차이점
Set은 값 중복이 되지 않음. List는 중복 가능
Set은 순서를 보장하지 않음. List는 순서대로 저장을 보장
import java.util.HashSet;
HashSet<Integer> A = new HashSet<Integer>();
A.add(1);
A.add(2);
// A.add(2); // 주석 해제해도 출력에는 2가 한번 나옴.
// A.add(2);
A.add(3);
Iterator hi = (Iterator) A.iterator();
while(hi.hasNext()){
System.out.println(hi.next());
}
ArrayList<Integer> B = new ArrayList<Integer>();
B.add(1);
B.add(2);
// B.add(2); // 주석하면 2가 더 나옴.
// B.add(2);
B.add(3);
Iterator hi2 = (Iterator) A.iterator();
while(hi2.hasNext()){
System.out.println(hi2.next());
}
Set이란?
Set은 집합이라는 수학적 개념을 프로그래밍화 시킴.
- 집합은 중복을 허용하지 않음
- 부분집합(subset), 합집합, 차집합을 어떻게 구현하고 있는가?
예제)
A 라는 컨테이너는 1,2,3. B에는 3,4,5. C에는 1,2를 담음.
import java.util.HashSet;
HashSet<Integer> A = new HashSet<Integer>();
A.add(1);
A.add(2);
A.add(3);
HashSet<Integer> B = new HashSet<Integer>();
B.add(3);
B.add(4);
B.add(5);
HashSet<Integer> C = new HashSet<Integer>();
C.add(1);
C.add(2);
System.out.println(A.containsAll(B)); // false - B는 A의 부분집합(subset)이 아니다.
System.out.println(A.containsAll(C)); // true - C는 A의 부분집합이다.
// A.addAll(B); // A와 B의 합집합(union)
// A.retainAll(B); // A와 B의 교집합(intersect) - retain= 간직하다라는 뜻. A, B 모두에 있는 값을 A에 담겠다
// A.removeAll(B); // A에서 B를 뺀 차집합(difference)
Iterator hi = (Iterator) A.iterator();
while(hi.hasNext()){
System.out.println(hi.next());
}
Collection interface
java.util.* -> Collection
Collection은 가장 상위에 있는 interface. Set, List 또한 interface.
구현 클래스
- AbstractSet
- HashSet
- Abstractist
- ArrayList
Collection interface와 Set은 정확히 같은 interface를 제공
List Interface는 추가로 get, add 등 같은 추가 인터페이스 메소드를 가지고 있음
- get(int index) - index 값으로 순서대로 저장 되어 있는 값들 중 하나를 가져옴
Iterator
반복자. 컨테니어 안에 있는 값을 하나하나씩 꺼내어 볼 수 있음.
Iterator는 interface임.
- hasNext: 값이 있는지 확인. 가져올 값이 존재하지 않으면 false return
- next: 값을 출력
Map
key, value 형태로 데이터를 저장. key 값은 중복될 수 없으며 value는 중복 가능.
- key: "one", value: 1
- key: "two", value: 2
- key: "three", value: 2
imort java.util.Collection;
HashMap<String, Integer> a = new HashMap<String, Interger>();
a.put("one", 1);
a.put("two", 2);
a.put("three", 2);
System.out.println(a.get("one");
System.out.println(a.get("two");
System.out.println(a.get("three");
iteratorUsingForEach(a);
iteratorUsingIterator(a);
// Map.Entry 라는 데이터 타입을 가지는 Set형태로 entries 생성
static void iteratorUsingForEach(HashMap map){
Set<Map.Entry<String, Integer>> entries = map.entrySet();
}
출처 및 참고
생활코딩 - Java : Collections framework (1/9) : ArrayList의 사용법
Java : Collections framework (2/9) : 전체적인 구성
Java - Collections framework (3/9) : List와 Set의 차이점
Java - Collections framework (4/9) : Set 이란?
Java - Collections framework (5/9) : Collection interface
Java - Collections framework (6/9) : iterator
Java : Collections framework (7/9) : Map의 기본 사용법 (1/2)
Java - Collections framework (8/9) : Map의 기본사용법 (2/2)
댓글