Java

자바의 신 ch.24 Map

langsamUndStetig 2022. 5. 24. 13:13

1. Map은 키(Key)와 값(Value)로 구성된다.

2. Map에서 데이터를 저장하는 메소드는 put()이다. 이 메소드의 첫 매개변수는 키이고, 두번째 매개변수는 값이다.

3. 특정 키에 할당된 값을 가져오는 메소드는 get()이다. 이 메소드의 매개변수로 찾고자 하는 키를 지정해 주면 된다.

4. 데이터를 지우는 메소드는 remove()이며, 매개변수에는 지우고자하는 키를 지정해 주면 된다.

5. keySet() 메소드를 호출하면 키의 목록을 Set 구조로 리턴한다.

6. size() 메소드는 저장되어 있는 데이터의 개수를 리턴한다.

7. Hashtable은 null을 저장할 수 없다.

8. Hashtable은 Thread에 안전하게 만들어져 있다.

9. containsKey()메소드를 사용하면 해당 키를 갖는 값이 존재하는지 확인할 수 있다.

10. TreeMap을 사용하면 키를 정렬하면서 데이터를 저장한다. 순서는 숫자, 대문자, 소문자, 한글 순이다.

11. Properties 클래스는 Hashtable을 확장한 클래스이다.

12. Properties 클래스의 store() 메소드를 사용하면 데이터를 파일로 저장한다.

 

mport java.util.Random;
import java.util.Hashtable;
import java.util.Set;


public class RandomNumberStatistics {
  //private final int DATA_BOUNDARY = 50; 
  // 예제 코드에선 이 값을 사용했지만, nextInt(origin, bound)를 사용했음
  Hashtable<Integer, Integer> hashtable = new Hashtable<>();

  public static void main(String[] args) {
    RandomNumberStatistics sample = new RandomNumberStatistics();
    sample.getRandomNumberStatistics();

  }

  public void getRandomNumberStatistics() {
   Random random = new Random();
      for(int i = 0 ; i < 5000; i++) {
//      //1부터 50까지 난수 생성
        int tempNumber = random.nextInt(1, 51);
//      // 바로 putCurrentNumber 메소드 호출
      putCurrentNumber(tempNumber);
    }
    printStatistics();
//    int runCount = DATA_BOUNDARY * 100;
//    for(int loop = 0; loop < runCount; loop++) {
//      int tempNumber = random.nextInt(DATA_BOUNDARY) + 1;
//      putCurrentNumber(tempNumber);
//    }
//    printStatistics();
  }

  public void putCurrentNumber(int tempNumber) {
    //hashtable에 특정 key가 있는지 확인해야했기 때문에  containsKey를 사용했음
    // 그러나 예제에서 contains 메소드를 사용하라고 했기 때문에 바꿨음
    //NullpointerException 발생 -> contains를 사용하면 발생함.
    // 값이 이상해서 코드를 확인해보니 containsKey를 사용했음
    if(hashtable.containsKey(tempNumber)){
      // 계속 NullPointerException이 발생해서 찾아보니, hashtable.get(tempNumber+1) 이라고 적혀있었음, 그래서 계속 오류발생
      // contains 메소드의 경우 위에 오류를 수정했음에도 불구하고 발생함
      hashtable.put(tempNumber, hashtable.get(tempNumber) + 1);

    } else {
      hashtable.put(tempNumber, 1);
    }
  }

  public void printStatistics() {
    Set<Integer> sets = hashtable.keySet();
//    for(Integer set : sets) {
//      System.out.print(set+"="+hashtable.get(set) + " " );
//      if(set%10-1==0) System.out.println();
    for(int key : sets) {
      int count = hashtable.get(key);
      System.out.print(key+ "=" + count + "\t");
      if(key%10 - 1 ==0) {
        System.out.println();
      }

    }

  }
}

출력값 (난수여서 계속 변경)