오늘 한 일

  • java 공부
    13일 java 공부에 이어서…
    • Set 인터페이스
      Collection 하위 인터페이스로, 중복을 허용하지 않아서 아이디, 주민번호, 사번 등 유일한 값이나 객체를 관리할 때 사용한다. 순서 기반의 List와는 달리 Set은 순서가 없다. 따라서 저장된 순서와 출력순서는 다를 수 있고, 또한 get(i) 메서드가 제공되지 않는다.

      • HashSet 클래스

      • TreeSet 클래스
        객체의 정렬에 사용되는 클래스로, 중복을 허용하지 않으면서 오름차순이나 내림차순으로 객체를 정렬한다. 내부적으로 이진 트리 검색(binary search tree)로 구현되어 있어서 자료가 저장될 때 비교하여 저장될 위치를 정한다. 객체 비교를 위해 Compareable 이나 Comparator 인터페이스를 구현해야 한다.

        HashSet에서는 원소를 저장할 때 equals(), hashCode() 메서드를 통해 객체간의 동일성을 체크하고 유일성을 보장했다면, TreeSet에서는 compareTo(), compare() 메서드를 통해 동일성을 체크한다.

        • Comparable 인터페이스와 Comparator 인터페이스
          정렬 대상이 되는 클래스가 구현해야하는 인터페이스이다.
          Comparable은 매개변수와 객체 자신(this)를 비교하는 compareTo() 메서드를 구현하고, Comparator는 두 개의 매개변수를 비교하는 compare() 메서드를 구현한다.
          compare 메서드를 사용하기 위해서는 TreeSet 생성자에 Comparator가 구현된 객체를 매개변수로 전달해야 한다.
          class MyCompare implements Comparator<String> {
            @Override
            public int compare(String str1, String str2) {
              return str1.compareTo(str2) * -1;
            }
          }
          
          public class ComparatorTest {
            public static void main(String[] args) {
              TreeSet<String> treeSet = new TreeSet<String>(new MyCompare());
            }
          }
          

          일반적으로 Comparable을 더 많이 사용한다. 이미 Comparable이 구현된 경우 Comparator를 이용해 다른 정렬 방식을 정의할 수 있다.

    • Map 인터페이스
      key-value pair의 객체를 관리하는데 필요한 메서드가 정의되어 있다. 검색을 위한 자료 구조로, key는 중복될 수 없고 key를 이용해 값을 저장하거나 검색, 삭제할 때 사용하면 편리하다. 내부적으로 hash 방식으로 구현되어 있다. (hash(key) => 저장 위치)

      key가 되는 객체는 객체의 유일성 체크를 위해 equals(), hashCode() 메서드를 재정의해야 한다.

    • HashMap

    • TreeMap
      TreeSet과 마찬가지로 정렬을 위해 key값의 클래스에 comparaTo(), compare() 메서드가 선언되어 있어야 한다.

      ※ 주의할 점: TreeSet은 원소로 들어갈 객체의 비교 메서드가 사용되지만, TreeMap은 key의 객체의 비교 메서드가 사용된다. 예를 들어 학생 객체의 id를 key로 사용하고 TreeMap<Integer, Student>로 생성했다면 Integer 클래스의 비교 메서드가 사용될 것이다.
      만약 다른 방식으로 정렬하고 싶다면 TreeSet에서와 동일하게 TreeMap 생성자에 Comparator가 구현된 객체를 매개변수로 넣어주면 된다.

참조