1) Collection API
1-1. Set
순서없이 저장하고, 같은 데이터(equals(), hashcode() 비교시)는 무시됨
-
HashSet : 같은 내용의 객체를 hashCode()가 같을 경우 같다고 인정함.
-
TreeSet : 트리구조를 이용하여 객체들을 정렬해서 관리함.
임포트하기
import java.util.HashSet; import java.util.Iterator; import java.util.Collection;
사용예제
-
저장했다가 다시 꺼내면 Object 타입으로 리턴되므로 (Primitive data type이 아님!)
저장할 데이터의 타입을 명시해두는게 좋음.
public static void main(String[] args){ Collection<Integer> list = new HashSet(); list.add(1); list.add(2); list.add(3); list.add(1); // 방법1 (Integer라고만 해야함) Iterator<Integer> i = list.iterator(); while(i.hasNext()){ System.out.print(i.next()); } System.out.println(); // (추천!) 방법2 (int라고 해도 됨) for(Integer num: list){ System.out.print(num); } }
1 2 3 1 2 3
-
1-2. List
- Resizable-array implementation of the List interface.
- 모든 element를 허용함.
- Constant time performance (size, isEmpty, get, set, iterator)
- 초기에 Capacity를 설정하는데, 원소가 쌓이면서 자동으로 커짐.
- Multilple threads access an ArrayList instance concurrently
사용예제
public static void main(String[] args){
Collection<String> al = new ArrayList<>();
al.add("a");
al.add("b");
al.add("c");
al.add("d");
for (String st : al){
System.out.print(st+" ");
}
System.out.println();
System.out.println(al.toArray()[3]);
}
a b c d
d
al.get(3)이 된다고 들었는데.. 이상하게 안되서 그냥 toArray()를 사용해서 array로 바꿨습니다.
1-3. Map
데이터 저장, 관리시에 검색을 쉽게하기 위해서 구현된 클래스
파이썬의 딕셔너리와 비슷한듯?
-
TreeMap : Red-black tree를 기반으로 한 맵이다.
-
Comparator를 기반으로 하여 key를 정렬해서 저장함.
Log(n) time performance (constinsKey, get, put, remove)
-
-
HashMap : Hash table을 기반으로 한 맵 인터페이스
-
null value와 null key를 허용함, 정렬기능은 없음
Constant time performance (get, put)
-
HashMap(capacity, loadFactor)
capacity : number of bucket
load factor : hashmap이 동적할당하기 위한 민감도(?)
=> 특정 크기를 초과하면 2배의 크기로 다시 할당함.
-
사용예제
public static void main(String[] args){
Map<String, Integer> hm = new HashMap<String, Integer>();
hm.put("Dongchan",100);
hm.put("Excellent",90);
hm.put("Good",80);
hm.put("Satisfied",70);
// 키로 가져오기
System.out.println(hm.get("Good"));
// iterator를 통해서 가져오기
Iterator<String> i = hm.keySet().iterator();
// for문을 통해서 가져오기
for(Integer num:hm.values()){
System.out.print(num+" ");
}
System.out.println();
}
80
90 100 70 80