[TIL] 2022.01.09

Minsu Han·2022년 1월 9일
0

TODAY I LEARNED

목록 보기
12/46
post-thumbnail

오늘 한 일

  • JAVA 복습 (chap15. 컬렉션 프레임워크)

배운 것

  • java.util 패키지의 Collection Framework
    Collection
    ㄴ List (ArrayList, Vector, LinkedList)
    ㄴ Set (HashSet, TreeSet..)
    Map
    ㄴ HashMap, HashTable, TreeMap, Properties..

  • ArrayList와 Vector 차이: Vector는 동기화 메소드로 구성되어 있기 때문에 멀티스레드 환경에서 안전하게 객체를 추가, 삭제할 수 있음 (Thread safe)

  • List와 달리 Set은 순서 유지 X, 중복 허용 X

  • HashSet은 객체 저장 전에 hashCode() 값이 같은 객체가 있는지 확인한 다음, 만약 있다면 equals() 값도 true인지 확인하여 true이면 동등 객체라고 판단하여 저장하지 않는다.
    (즉, 인스턴스가 달라도 hashCode(), equals() 값이 같으면 중복 저장하지 않는다)

  • Map: key-value로 구성된 Entry 객체를 저장. key는 중복 불가, value는 중복 가능. key, value의 타입은 기본 타입을 사용할 수 없고 클래스 및 인터페이스 타입만 가능함

  • HashMap도 HashSet과 마찬가지로, HashMap의 key로 사용할 객체는 hashCode()와 equals()를 재정의하여 동등 객체가 될 조건을 정해야 한다.

  • HashMap과 Hashtable 차이: 두 자료구조 모두 동일한 내부 구조를 가지며 동등 객체 조건을 정해야 하지만 Hashtable은 Thread safe하다.

  • Properties: key, value 값을 String으로 제한한 컬렉션. 애플리케이션 옵션 정보, DB 연결 정보, 다국어 정보 등이 저장된 프로퍼티(~.properties) 파일을 읽을 때 주로 사용함

  • TreeSet, TreeMap: 이진 트리(binary tree)를 이용한 트리 구조로 객체를 저장하여 검색 기능을 강화. 오름차순으로 노드들을 가져오는 iterator() 메소드와 내림차순으로 정렬된 NavigableMap을 리턴하는 descendingMap() 등 정렬 기능을 가진 메소드를 제공하기 때문에, Comparable 인터페이스의 compareTo(T o)가 구현된 정렬 가능한 객체를 요구한다.

public class Person implements Comparable<Person> {
      ...
      ...

      @Override
      public int compareTo(Person o) {
          ...
      }
}
  • binary tree: 부모 노드보다 작은 값은 left, 큰 값은 right 자식 노드로 저장
  • Comparable을 구현하지 않은 객체를 정렬하려면 TreeSet/TreeMap의 생성자 매개값으로 compare(T o1, T o2)를 구현한 Comparator를 제공하면 된다.
TreeSet<E> treeSet = new TreeSet<E>(new AscendingComparator());

public class AscendingComparator implements Comparator<E> {
	@Override
	public int compare(E o1, E o2) {
		...
	}
}
  • Stack(LIFO), Queue(FIFO)
  • Collections는 ArrayList, HashSet, HashMap 등 싱글 스레드 환경에서 사용하던 것을 멀티 스레드 환경으로 전달해야 하는 경우 비동기화된 메소드를 동기화된 메소드로 래핑하는 synchronizedXXX() 메소드를 제공
List<T> list = Collections.synchronizedList(new ArrayList<T>());
// List, Map, Set에 대해 제공
  • 동기화된 컬렉션은 멀티스레드 환경에서 하나의 스레드가 요소를 처리할 때 전체에 lock을 걸기 때문에 병렬 처리에 불리하다. 이를 해결하기 위해, 전체에 lock을 거는 대신 처리중인 요소가 포함된 부분만 lock을 걸고 나머지 부분은 다른 스레드가 변경 가능하도록 하여 멀티스레드 환경에서 병렬 처리를 할 수 있게 하는 ConcurrentHashMap, ConcurrentLinkedQueue등의 컬렉션이 제공된다.

내일 할 일

  • JAVA 복습 (chap16. 스트림과 병렬 처리)
profile
기록하기

0개의 댓글