JAVA - Collection(2) Set, Map, 정렬

이상해씨·2022년 7월 30일
0

웹 풀스택(JAVA)

목록 보기
12/54

✔Set

  • 특징
    • 순서없이 주머니에 구슬(데이터)를 넣는 형태.
    • 순서가 없으므로 데이터를 구별할 index가 없어 중복 불가.
      • 효율적인 중복 데이터 제거 수단.
      • 동일한 데이터는 추가되지 않음.
    • index가 없으므로 객체를 삭제하기 위해서 객체와 동일한 값을 전달.
  • 동일한 데이터의 기준
    • 객체의 equals()가 true를 리턴하고 hashCode()값이 같을 것.
      • 따라서 equals()를 재정을 할 때 hashCode()의 재정의도 필요.

✔Map

  • 특징 : Key와 Value를 하나의 Entry로 묶어서 데이터 관리
    • Key : Object 형태로 데이터 중복 불가.
    • Value : Object 형태로 데이터 중복 허용.
    • 데이터를 추가할 때 이미 존재하는 Key이면 값만 변경.
  • Map interface 주요 메서드
분류Map< K, V>
추가put(K key, V value)
putAll(Map< ? extends K, ? extends V > m
조회containKey(Obejct key)
containValue(Object value)
entrySet()
KeySet()
get(Object key)
values()
size()
isEmpty()
삭제clear()
remove(Object key)
수정put(K key, value)
putAll(Map< ? extends K, ? extends V > m

✔정렬

  • 정렬 : 요소를 특정 기준에 대한 오름차순 또는 내림차순 으로 배치하는 것.
    • 순서를 가지는 Collection들만 정렬 가능.
      • List 계열.
      • Set : SortedSet(TreeSet)의 자식 객체.
      • Map : SortedMap(TreeMap)의 자식 객체(Key 기준 정렬).
    • Collections.sort(List list) : 객체가 Comparable을 구현하고 있는 경우 내장 알=고리즘을 통해 정렬.
  • interface Comparable : int compareTo(T o) - 객체 정렬 기준 구현시 사용. (양수 : 자리 바꿈, 음수 : 자리 유지, 0 : 동일 위치)
// Comparable : 객체 정렬 기준 구현.
class TestClass implements Comparable<TestClass>{
	type ooo;

	@Override
	public int compareTo(T o){
		return this.ooo.compareTo(o.ooo);
	}
}
  • interface Comparator : int compare(T o1, T o2) - (양수 : 자리 바꿈, 음수 : 자리 유지, 0 : 동일 위치)
    • Comparable을 구현하고 있지 않거나 사용자 정의 알고리즘으로 정렬하려는 경우.
    • Collections.sort(List list, Comparator < ? Super T> c)
// Comparator : 글자수 정렬 (사용자 정의 정렬 클래스 구현시 사용.)
class StringLengthComparator implements Comparator<String> {
	@Override
	public int compare(String o1, String o2) {
		int len1 = o1.length();
		int len2 = o2.length();
		return Integer.compare(len1, len2);
	}
}
  • Comparator 활용 : 익명 클래스, 람다 표현식
  1. 익명 클래스(Anonymous inner Clas) : 클래스, 정의, 객체 생성을 한 번에 처리하는 방식.
    • 1회성 객체가 필요한 경우 사용.(재사용성이 불피요한 경우.)
Coolections.sort(StringList, new (클래스명 implements가 생략된 형태) Comparator<String>({
	@Override
	public int compare(Stirng o1, String o2){
		return Integer.compare(o1.length(), o2.length());
	}
});
  1. 람다 표현식
    • JDK 8버전부터 익명 클래스를 람다식으로 전달 가능.
    • (파라미터) -> 메서드 구현부 (1라인일 때 중괄호, return 생략 가능)
    • (파라미터) -> { return Integer.compare(o1.length(), o2.length())}
Coolections.sort(StringList, (o1, o2) ->{
	return Integer.compare(o1.length(), o2.length());
});
profile
후라이드 치킨

0개의 댓글