Array : 생성시 배열의 크기와 타입을 정해야함, 중간의 값을 지우면 자리가 그대로 남아있음.
Collection : 생성시 크기와 타입을 정할 필요 없음, 중간의 값을 지우면 자리도 사라지고 뒷값이 땡겨짐.
(∵컬렉션은 다양한 타입의 자료를 입력할수 있음 => but, 일반적으로 지네릭을 이용해 하나의 자료형만 입력.)
●List (가변 array)
- index 이용, 데이터(value) 중복 O
ArrayList<String> list = new ArrayList<String>();
●Set
- 데이터 중복 X(∵ 순서 X)
- 데이터 중복여부를 hashCode()와 equals()로 확인함.
HashSet<String> set = new HashSet<String>();
- 동등객체 : hashCode()와 equals()의 결과값이 true일 때
class를 정의할 때 동등객체로 적용하고 싶으면 hashCode()와 equals()을 오버라이딩 해야함.
HashSet : equals(), hashCode() 비교해서 중복여부 확인
TreeSet : equals(), hashCode() 비교 + Comparable 구현여부 확인 (Comparable이 정렬할때 필요)
│ (Comparable을 구현하던지 Comparator를 제공하던지 해야 정렬이 가능함)
└> SortedSet 상속받음(정렬)
●Map
- key 이용(중복 X), 데이터(value) 중복 O
HashMap<Integer, String> map = new HashMap<Integer, String>();
- 한개의 값 -> Entry인터페이스의 getKey(), getValue()
- 모든 값 -> Key : Set keySet() / Values : Collection values() / Key-Value : Set entrySet()
(Values는 중복된 값이 들어갈 수 있으므로 반환타입이 Set이 아님)
- 정렬관련된 메서드는 TreeMap에만 구현되어 있음. (HashMap에서 사용할 수 X)
->TreeMap 클래스에만 정렬에 관련된 메서드를 정의한 NavigableMap이 구현되어 있음.
▷Map.Entry 인터페이스 : Key-Value 쌍을 다루기 위한 인터페이스, Map인터페이스 내부에 정의되어 있음.
● Comparable 인터페이스 (추상메서드 compareTo()만 들어있음)
- 클래스의 기본 정렬 방식을 지정할 때 사용 (기본값 : 오름차순 [공백, 숫자, 대문자, 소문자 순서])
- compareTo(Object)에 정렬방식을 구현
- Comparable 인터페이스를 구현한 클래스는 정렬이 가능함
즉, 사용자정의 클래스에서 Collections.sort()를 사용하기 위해서는 반드시 Comparable 인터페이스를 구현해야함.
● Comparator 인터페이스
- 기본 정렬 방식을 변경할 때 사용
- compare(Object o1, Object o2)에 정렬 방식 변경구현
-> 변경할 때 보통 기존의 compareTo()를 이용함
ex) String의 경우 클래스에서 compareTo()가 정의되어 있는데 final이라 수정X
-> 정렬 방식을 변경하고 싶을 때 Comparator를 사용함.
static void sort(Object a) // 지정된 Comparable에 의한 정렬
static void sort(Object a, Comparator c) // 수정된 Comparator에 의한 정렬
● Iterator
- Collection 인터페이스에 iterator() 정의
- List 와 Set 인터페이스에 iterator() 오버라이딩
- Iterator 인터페이스 : hasNext(), next(), remove() 구현되어 있음.
- 일회용임
- Map에서 사용하기 위해서는 Key, Entry->Set, Value->Collection으로 변환한 후 iterator()을 호출해야함.
[Map -> Set(Key or Entry의 경우) : keySet() or entrySet() / Map -> Collection(Value의 경우) : values() 사용해 변환]
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("나자바", 85); map.put("홍길동", 90);
map.put("동장군", 80); map.put("홍길동", 95);
// keySet()
Set<String> keySet = map.keySet();
Iterator<String> keyIterator = keySet.iterator();
while (keyIterator.hasNext()) {
String key = keyIterator.next();
Integer value = map.get(key);
System.out.println(key + " : " + value);
}
System.out.println();
// entrySet()
Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
Iterator<Map.Entry<String, Integer>> entryIterator = entrySet.iterator();
while (entryIterator.hasNext()) {
Map.Entry<String, Integer> entry = entryIterator.next();
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println(key + " : " + value);
}
// values()
Collection<Integer> c = map.values();
Iterator<Integer> valueIterator = c.iterator();
while (valueIterator.hasNext()) {
Integer value = valueIterator.next();
System.out.println(value);
}
}
}
// keySet()
나자바 : 85
홍길동 : 95
동장군 : 80
// entrySet()
나자바 : 85
홍길동 : 95
동장군 : 80
// values()
85
95
80
● Properties
- Hashtable의 하위 클래스임. (계층도 : Map-Hashtable-Properties)
- (key, value) 자료형이 모두 String이고 지네릭 표현 X
- txt, xml파일에 Properties 객체를 추가할 수 있는 기능
● Stack과 Queue
- Stack 클래스 : LIFO, Vector의 하위클래스
push() : 저장, pop() : 꺼내오면서 제거, peek() : 조회
- Queue 인터페이스 : FIFO, LinkedList에서 구현
offer() : 저장, poll() : 꺼내오면서 제거, peek() : 조회
'Langauge > JAVA' 카테고리의 다른 글
클래스멤버와 인스턴스멤버 간의 참조와 호출 (0) | 2020.05.14 |
---|---|
기본형 매개변수와 참조형 매개변수 (0) | 2020.05.14 |
Eclipse 단축키 (0) | 2020.04.17 |
삼항연산자 (0) | 2020.04.02 |
Scanner 클래스 (0) | 2020.03.31 |