Woopii Vyeolog

[Java] Array 중복 제거 본문

java

[Java] Array 중복 제거

WooPii 2022. 4. 4. 02:22

## Github 주소

https://github.com/leewoopyo/java-logic-tests

remove_duplication 패키지

 

GitHub - leewoopyo/java-logic-tests: java-logic-tests

java-logic-tests. Contribute to leewoopyo/java-logic-tests development by creating an account on GitHub.

github.com

 

 

1. Array를 Set으로 변환 후 다시 Array로 변환

Set은 중복을 허용하지 않기 때문에 중복이 있는 Array를 Set으로 변환 시 중복이 제거됨

LinkedSet 은 순서가 보장되는 Set이다

 

1-1 Array <-> Set

        // 배열을 HashSet으로 변환 (중복이 제거됨)
        HashSet<String> hashSet = new HashSet<>(Arrays.asList(arr));
        // HashSet을 배열로 변환 (중복(Dup)이 제거된 배열)
        arr = hashSet.toArray(new String[0]);

1-2 Array <-> LinkedSet

        // 배열을 HashSet으로 변환 (중복이 제거됨)
        LinkedHashSet<String> linkedhashSet = new LinkedHashSet<>(Arrays.asList(arr));
        // HashSet을 배열로 변환 (중복(Dup)이 제거된 배열)
        arr = linkedhashSet.toArray(new String[0]);

 

2. Stream distinct()를 활용하여 중복 제거

Array를 Stream으로 변환 후 distinct()를 활용 하여 중복 제거 후 다시 Array로 변환

        // 배열 -> Stream -> distinct (중복제거) -> 배열
        arr = Arrays.stream(arr).distinct().toArray(String[]::new);

 

3. 임시 Array를 이용하여 중복 제거 1

임시 배열을 사용하여 중복제거, 배열상 옆 데이터를 바로 비교하기 때문에 Sort을 한다. 때문에 순서보장 X

        // 배열 sorting
        //Arrays.sort(arr);
        
        // 임시 배열 선언
        String[] tempArr = new String[n]; 

        // 중복 제거 후 array의 길이
        int j = 0;  

        // 임시 배열 구성
        for (int i=0; i<n-1; i++){  
            if (arr[i] != arr[i+1]){  
                tempArr[j++] = arr[i];  
            }
        }
        tempArr[j++] = arr[n-1];       

        // 중복 제거된 배열 구성
        arr = new String[j];
        for (int i=0; i<j; i++){  
            arr[i] = tempArr[i];  
        }

 

4. 중복데이터를 치환 후 제거하여 중복 제거

중복데이터를 변환 후 분기처리하여 중복제거

        // 중복 제거 후 array의 길이
        int k = 0;  

        // 중복되는 데이터 "" 변환
        for (int i=0; i<n-1; i++){  
            for (int j=i+1;j<n;j++) {
                if (!arr[i].equals("") && arr[i].equals(arr[j])) {
                    arr[j] = "";
                    k++;
                }
            }
        }

        String[] resultArr = new String[n-k];
        int tmpindex = 0;

        //새로운 배열 생성
        for (String str : arr) {
            if (!"".equals(str)) {
                resultArr[tmpindex] = str;
                tmpindex++;
            }
        }

 

Comments