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

+ Recent posts