목록에서 중복된 요소를 제거하고 싶으십니까? 방법이 2가지 있는데 빨리 써보세요

"Java Architecture Stack" WeChat 공식 계정을 팔로우하고 비밀번호 [Java 인터뷰 질문]을 입력하면 대기업의 인터뷰 질문을 받을 수 있습니다.

 문제 배경

최근 많은 친구들이 뒤에서 보 형제에게 개인적으로 메시지를 보내 다음과 같은 질문을 했습니다. "보 형제님, 제가 최근에 일자리를 찾고 있는데 면접관이 목록에서 중복 항목을 제거하는 방법을 물었습니다. 내 대답은 그렇지 않은 것 같습니다. 예상되는 결과, Bo 형제는 면접관을 만족시키기 위해 이 질문에 어떻게 답할 수 있습니까?" 이 질문에 대해 Bo 형제는 중복 제거를 위해 JDK 8의 스트림을 사용할 것을 제안합니다. 이유는 무엇입니까? 다음으로 보 형제님이 전해드릴 분석을 살펴보시기 바랍니다.

 목록 중복 제거 방법

모든 사람이 이 질문에 더 완벽하게 답할 수 있도록 보 형제는 다음과 같은 중복 항목을 제거하는 고전적인 방법을 보여줍니다.

2.1 반복자 중복 제거

첫 번째 방법은 반복자를 사용하여 데이터의 각 항목을 반복할 수 있습니다. 컬렉션에 현재 반복되는 데이터의 복사본이 두 개 이상 있으면 현재 요소가 삭제됩니다. 이 루프 후에 중복 데이터 없이 컬렉션을 얻을 수 있습니다. 이는 중복을 제거하는 일반적인 방법입니다. 구현 코드는 다음과 같습니다.

public class ListTest {
    public static void main(String[] args) {
       List<Integer> list = new ArrayList<Integer>() {
   
   {
        add(2); add(5); add(9);
        add(2); add(4); add(9);
        add(3); add(7); add(8);}};
        System.out.println("原list:"+list);
        test(list); 
    }
        
    public static void test(List<Integer> list){
        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()){
            Integer integer = iterator.next();
            if(list.indexOf(integer)!=list.lastIndexOf(integer)){
                iterator.remove();} 
                }
        System.out.println("新list:"+list); 
    }
 }

위 코드를 실행하면 다음과 같은 결과가 나옵니다.

하지만 주의 깊게 살펴보면 반복자를 사용하여 중복 항목을 제거할 때 List 결과의 순서가 혼동되고 원래 수집 순서와 다르다는 것을 알 수 있습니다.

2.2 스트림 중복 제거

이때 보 형제는 친구들에게 새로운 실행 계획을 소개할 것입니다. 이에 대해 답해 주시면 면접관님도 만족해하며 고개를 끄덕이실 거라 믿습니다. 이 구현 방법은 JDK8에서 가져온 Stream 스트림을 사용합니다. Stream을 사용하면 다음 중복 제거 효과와 같은 많은 기능을 쉽게 구현할 수 있습니다.

public class ListTest {
    public static void main(String[] args) {
       List<Integer> list = new ArrayList<Integer>() {
   
   {
        add(2); add(5); add(9);
        add(2); add(4); add(9);
        add(3); add(7); add(8);}};
        System.out.println("原list:"+list);
        test(list);
    }
    
    public static void test(List<Integer> list){
        list=list.stream().distinct().collect(Collectors.toList());
        System.out.println("新list:"+list); 
    }
}

이제 위의 구현 코드가 반복자 구현보다 간단하다는 것을 알 수 있습니다. 위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

또한, stream() 메소드를 사용하여 실행 결과의 중복을 제거할 뿐만 아니라 컬렉션 요소의 원래 순서를 변경하지 않아 컬렉션 내용의 질서를 보장합니다. 이는 기존 중복 제거 방법보다 간단하고 효과적입니다. 그리고 더 나은 성능을 가지고 있습니다.

 요약

위의 두 가지 방법 외에도 실제로 목록 컬렉션을 중복 제거할 수 있는 다른 방법도 있습니다. 이 기사에서 보 형제는 위의 두 가지 방법을 모든 사람에게 설명할 뿐입니다. 소개로 생각하십시오. 다른 방법을 알고 있다면 댓글 영역에 답변을 제공할 수 있습니다. 오늘의 내용을 배우셨나요? Java 아키텍처 스택에 주의를 기울이면 매일 유용한 정보를 얻을 수 있습니다!

추천

출처blog.csdn.net/weixin_41692221/article/details/131325972