어제 오늘 내일

[Java] ArrayList 중복 값 개수 세기 본문

IT/Java

[Java] ArrayList 중복 값 개수 세기

hi.anna 2021. 5. 17. 08:03

 

  1. Collections.frequency() 이용하기
  2. Map 이용하기

 

 

1. Collections.frequency() 이용하기

public static int frequency(Collection<?> c, Object o)

위 메소드는

첫번째 파라미터로 전달된, Collection 객체에서

두번째 파라미터로 전달된 Object와 같은 값이 몇번이나 포함되어 있는지 찾아서

횟수를 리턴합니다.

파라미터로 전달된 값과 Collection 객체의 원소가 같은지 여부는

equals() 메소드를 사용하여 판단합니다.

 

 Collections.frequency() 이용해서 특정 값 개수 세기 

  예제  

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

public class ArrayListDupCheck {
    public static void main(String[] args) {
        // ArrayList 준비
        ArrayList<String> list = new ArrayList<>(Arrays.asList("A", "B", "C", "A", "B", "A"));
        System.out.println("원본 : " + list); // [A, B, C, A, B, A]

        // "A" 빈도수
        int aFrequency = Collections.frequency(list, "A");
        System.out.println(aFrequency); // 3
        
        // "B" 빈도수
        int bFrequency = Collections.frequency(list, "B");
        System.out.println(bFrequency); // 2

        // "C" 빈도수
        int cFrequency = Collections.frequency(list, "C");
        System.out.println(cFrequency); // 1

        // "D" 빈도수
        int dFrequency = Collections.frequency(list, "D");
        System.out.println(dFrequency); // 0
    }
}

Collections.frequency()  메소드에

대상 ArrayList와 찾으려는 값을 전달하여 빈도수를 출력하였습니다.

 

 

 Collections.frequency() 이용해서 전체 ArrayList의 중복 값 개수 세기 

  예제  

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

public class ArrayListDupCheck {
    public static void main(String[] args) {
        // ArrayList 준비
        ArrayList<String> list = new ArrayList<>(Arrays.asList("A", "B", "C", "A", "B", "A"));
        System.out.println("원본 : " + list); // [A, B, C, A, B, A]

        // ArrayList 원소 빈도수 출력
        Set<String> set = new HashSet<String>(list);
        for (String str : set) {
            System.out.println(str + " : " + Collections.frequency(list, str));
        }
    }
}

  결과  

원본 : [A, B, C, A, B, A]
A : 3
B : 2
C : 1

Set<String> set = new HashSet<String>(list);

ArrayList의 모든 원소의 빈도수를 출력하기 위해서

ArrayList를 중복이 없는 Collection 객체인 HashSet으로 변경하였습니다.

 

for(String str : set) {

   System.out.println(str + " : " + Collections.frequency(list, str));

}

HashSet을 순회하면서,

각 값의 빈도수를 Collections.frequency() 메소드를 이용하여 계산하였습니다.

 

 

 

2. Map 이용하기

반복문을 이용하여 HashMap 객체에 key(원소), value(중복 횟수) 형식으로 저장하고 출력하는 방법입니다.

 

  예제  

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class ArrayListDupCheck {
    public static void main(String[] args) {
        // ArrayList 준비
        ArrayList<String> list = new ArrayList<>(Arrays.asList("A", "B", "C", "A", "B", "A"));
        System.out.println("원본 : " + list); // [A, B, C, A, B, A]

        // ArrayList 원소 빈도수를 Map에 저장
        Map<String, Integer> map = new HashMap<String, Integer>();
        for (String str : list) {
            Integer count = map.get(str);
            if (count == null) {
                map.put(str, 1);
            } else {
                map.put(str, count + 1);
            }
        }

        // // Map 출력
        for (String key : map.keySet()) {
            System.out.println(key + " : " + map.get(key));
        }
    }
}

  결과  

원본 : [A, B, C, A, B, A]
A : 3
B : 2
C : 1

Map<String, Integer> map = new HashMap<String, Integer>();

ArrayList 원소와 중복 횟수를 저장할 HashMap 객체를 준비합니다.

 

for (String str : list) {

   Integer count = map.get(str);

   if (count == null) {
      map.put(str, 1);
   } else {
      map.put(str, count + 1);
   }

}

ArrayList를 순회하면서 

ArrayList의 원소가 HashMap 객체에 key로 들어있는지 확인하고,

만약 없으면, 

value(중복 횟수)를 1로 세팅하고 HashMap에 추가합니다.

만약 있으면, 중복되는 데이터 이므로,

value(중복 횟수)를 1 증가시켜서 HashMap에 추가합니다.

(HashMap은 key의 중복을 허용하지 않으므로, 같은 key 값이 추가되면, 값을 덮어씁니다.)

 


 

 

ArrayList의 중복값 개수를 확인하는 방법을 알아보았습니다.

 

 

반응형
Comments