흰 스타렉스에서 내가 내리지

[Java] List에서 중복제거, 효율적인 방법은? 본문

Java

[Java] List에서 중복제거, 효율적인 방법은?

주씨. 2023. 5. 31. 04:23
728x90

List에서 중복을 제거하는 방법을 구글에 검색해보면, 다양한 방법을 소개해주지만 무엇이 더 효율적인지 알려주는 글은 찾지 못했다. 더 검색해보면 찾을 수 있겠지만, 그 전에 그냥 내가 직접 실험해보고 싶어졌다. 

 

List에서 중복을 제거하는 방법으로는 두가지가 있겠다. 

1. Set을 이용하기

2. Stream을 이용하기 

 

결론 : Stream이 대체적으로 더 빠르다.

 

 

테스트 코드 

//////////////////////////////////////////////////////////
        long startTime = System.currentTimeMillis();

        Set<TermSimpleDto> sets = new HashSet<>();

        for (Category category : member.getCategories()) {
            List<TermSimpleDto> lists = convertCollectionTermSimpleDto(termRepository.getTermsByCategory(member.getId(), category.getId()));
            sets.addAll(lists);
        }

        List<TermSimpleDto> lists = new ArrayList<>(sets);

        long endTime = System.currentTimeMillis();
        long executionTime = endTime - startTime;
        System.out.println("Execution Time: " + executionTime + " ms - Set을 이용하여 중복 제거");

        //////////////////////////////////////////////////////////
        startTime = System.currentTimeMillis();

        List<TermSimpleDto> a = new ArrayList<>();
        for (Category category : member.getCategories()){
            a.addAll(convertCollectionTermSimpleDto(termRepository.getTermsByCategory(member.getId(), category.getId())));
        }
        a = new ArrayList<>(a.stream().distinct().collect(Collectors.toList()));
        endTime = System.currentTimeMillis();

        executionTime = endTime - startTime;
        System.out.println("Execution Time: " + executionTime + " ms - Stream을 이용하여 중복 제거");
        System.out.println("===========================================");
        ////////////////////////////////////////////////////////////

 

실행 시간 비교 :