동현 유
척척석사
동현 유
전체 방문자
오늘
어제
  • 분류 전체보기 (181)
    • BlockChain (48)
      • [paper] Consensus (13)
      • [paper] Execution (19)
      • [paper] Storage (5)
      • [paper] ZKP (1)
      • [paper] Oracle (1)
      • Blockchains (9)
    • Java (19)
      • Java의 정석 (13)
      • Java 파헤치기 (5)
    • Python (20)
      • Python 뜯어보기 (6)
      • 데이터 분석 기초 (5)
      • Python 기초 강의 (6)
      • Python 기초 강의 부록 (3)
    • Golang (0)
    • MySQL (3)
      • programmers (2)
      • 기본 문법 (0)
    • 웹 프로젝트 (IBAS) (36)
      • Django 레거시 (14)
      • SpringBoot api 개편 (14)
      • Infra (3)
      • 서버 장애 기록 (4)
      • 신입팀원 교육 자료 (1)
    • CS (30)
      • Operating System (22)
      • Computer Security (3)
      • Network (4)
      • DBMS (1)
    • 책 (10)
      • 도메인 주도 설계 철저 입문 (9)
      • Real MySQL 8.0 (1)
    • BOJ 문제 풀이 (3)
    • 이러쿵저러쿵 (10)
    • 회고 (1)

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.
동현 유

척척석사

[Java의 정석] 11. Collections Framework
Java/Java의 정석

[Java의 정석] 11. Collections Framework

2022. 3. 23. 10:20

1.5 Iterator, ListIterator, Enumerator

  : JCF 에서는 저장된 요소를 읽어오는 방법을 표준화하였다. Iterator 인터페이스에 정의되었고, Collection 인터페이스에 Iterator 를 반환하는 iteratore() 를 정의하고 있다

List list = new ArrayList();  // 다른 컬렉션으로 변경할 때는 이 부분만 고치면 된다.
Iterator it = list.iterator();

while(it.hasNext()) {
	// do sth..
}

 

Map 인터페이스에는 iterator 를 반환하도록 되어있지 않기 때문에,

key 나 entry 집합으로 반환한 후에 iterator 호출이 가능하다.

Iterator keyIt = map.keySet().iterator();
Iteratore entryIt = map.entrySet().iterator();

 

Enumeration 은 구버전으로 하위호환성을 위해 남겨두고 있을 뿐이다.

ListIterator 는 List 인터페이스를 상속받은 경우에 사용할 수 있는데, 양방향 조회 기능이 추가되었다.

 

Iterator 인터페이스를 구현할 때,  필수로 구현하지 않아도 되는 메소드가 있는데,

빈 블록으로 남겨놓기보다는 UnsupportedOperationException 을 던지도록 하는게 바람직하다.

 

1.7 Comparator와 Comparable

  : 컨테이너 클래스의 기본 정렬 기준을 설정할 때는 Comparable 을 상속받아야한다. 그 외의 모든 컬렉션에 사용할 수 있도록 오름차순 정렬 객체, 내림차순 정렬 객체 등의 특별한 객체를 만들고 싶을 때는 Comparator를 구현하면 된다.

public class MyInteger extends Number implements Comparable {
	// ...생략... //
    
    public int compareTo(Object o) {
    	return compareTo((MyInteger)o);
    }
    public int compareTo(MyInteger another) {
    	if (this.value < another.value)
        	return -1;
        else if (this.value == another.value)
        	return 0;
       	else
        	return 1;
    }
}
class CompartorExample {
    public static void main(String[] args) {
    	String[] strArr = {"cat", "dog", "lion", "tiger"};
        MyInteger[] myIntergers = {1, 2, 3, 4, 5};
    
    	Arrays.sort(strArr, new Descending());
        Arrays.sort(myIntegers, new Descending());
    }
}

class Descending implements Comparator {
    public int compare(Object o1, Object o2) {
    	if(o1 instanceof Comparable && o2 instanceof Comparable) {
            Comparable c1 = (Comparable)o1;
            Comparable c2 = (Comparable)o2;
            return c1.compareTo(c2);
        }
        return -1;
    }
}
1.8 HashSet
  • HashMap 을 상속했다.
  • equals() true 이면서 hashCode() 가 서로 동일해야 같은 객체로 인식한다.
  • 두 객체가 equals() true 라면 hashcode 는 동일해야 하지만, 역은 항상 성립하지 않는다.
  • 두 객체가 equals() false 일때, hashcode 가 달라야 성능이 더 좋다. (같아도 상관없다. 하지만 해시충돌문제가 생길수 있다.)
1.9 TreeSet
  • RedBlackTree 로 구현되어있다.
1.11 TreeMap
  • 단일 검색은 HashMap 이 더 빠르지만, 정렬이나 범위검색의 경우 용이하다.
1.12 Properties
  • hashTable 을 상속받아 구현했다. <String, String> 의 특수한 경우.
  • list(PrintStream out), list(PrintWriter out) 메서드를 이용해서 데이터를 파일에 편리하게 출력할 수 있다.
  • load(FileInputStream inputFile) 메서드를 이용하면, 정해진 형식의 파일을 쉽게 읽어올 수 있다.
  • store, storeToXML 등의 메소드도 지원한다.
1.13 Collections
  • synchronizedXXX : 동기화 제공. 하지만 concurrent 하지 않다.
  • unmodifiableXXX : 변경 불가 컬렉션 반환
  • singletonXXX
  • checkedXXX : 사용할 일이 거의 없다.. 제네릭으로 해결할 수 있다.

'Java > Java의 정석' 카테고리의 다른 글

[Java의 정석] 14. 람다와 스트림  (0) 2022.05.10
[Java의 정석] 12. 제네릭스, 열거형, 어노테이션  (0) 2022.04.04
[Java의 정석] 09. java.lang 패키지  (0) 2022.03.17
[Java의 정석] 08. 예외 처리  (0) 2022.03.17
[Java의 정석] 7.2 메소드 오버라이딩 시 예외 선언  (0) 2022.03.14
    동현 유
    동현 유
    Fault Tolerant System Researcher for more Trustful World and Better Lives. (LinkedIn: https://www.linkedin.com/in/donghyeon-ryu-526b8a276/)

    티스토리툴바