Java 8 Date와 Time / 배열 Parallel 정렬

Red Culture·2021년 8월 23일
0

Java 8에서 새로운 날짜와 시간이 생긴 이유

자바 8 이전에 사용하던 java.util.Date 클래스는 mutable 하기 때문에 thread-safe 하지 않다. Date인데 시간까지 다뤄서 이름이 적절하지 않다. 월이 0부터 시작하거나..int 타입이어서 음수값도 올 수 있기 때문에 타입 안정성이 없어서 버그 발생 가능성이 높다.

        Date date = new Date();
        long time = date.getTime();
        System.out.println(date);
        System.out.println(time);

	// 똑같은 인스턴스인데 인스턴스의 데이터가 변경되었다.
        Thread.sleep(1000 * 3);
        Date after3Seconds = new Date();
        System.out.println(after3Seconds);
        after3Seconds.setTime(time);
        System.out.println(after3Seconds);

또 이상한 건.. Date 클래스에서 getTime()을 하면 long이 나오고, Calander 클래스에서 getTime()을 하면 Date가 나온다..

배열 Parallel 정렬

Arrays.parallelSort()를 사용해서 Fork/Join 프레임워크를 사용해서 배열을 병렬로 정렬하는 기능을 제공한다.

  • Arrays.sort()는 싱글 쓰레드를 사용하고, 자바에서는 기본적으로 Dual-Pivot QuickSort를 사용하는데 시간복잡도는 O(nlog(n)), 공간복잡도는 O(n)이다.
  • Arrays.parallelSort()는 시간복잡도는 O(nlog(n)), 공간복잡도는 O(n)으로 알고리즘 효율성은 같지만, 속도에 있어서 빠른 효율을 보인다.
        int size = 1500;
        int[] numbers = new int[size];
        Random random = new Random();
        IntStream.range(0, size).forEach(i -> numbers[i] = random.nextInt());

        long start = System.nanoTime();
        Arrays.sort(numbers);
        System.out.println("serial sorting took " + (System.nanoTime() - start));

        IntStream.range(0, size).forEach(i -> numbers[i] = random.nextInt());
        start = System.nanoTime();
        Arrays.parallelSort(numbers);
        System.out.println("parallel sorting took " + (System.nanoTime() - start));
profile
자기 개발, 학습 정리를 위한 블로그

0개의 댓글