본문 바로가기
Developer/Java

ArrayList 중복 카운트

by 순수한소년 2017. 1. 13.
728x90
반응형

출처

http://www.cremazer.zz.mu/?p=1020




import java.util.ArrayList;
import java.util.Arrays;
 
 
public class Test {
    public static void main(String[] args) {
        /** 원본 데이터 */
        int[] data = {10,3,4,50,4,4,1,2,10,10,25,2,10};
        
        /** 원본 데이터 유형 */
        ArrayList<Integer> itemList = new ArrayList<Integer>();
        /** 원본 데이터 유형별 중복개수 */
        ArrayList<Integer> cntList = new ArrayList<Integer>();
        
        //1. 데이터 유형 및 개수를 설정한다.
        for(int index = 0 ; index < data.length ; index++){
            //item이 등록되었는지 확인한다.
            //1.1 등록되지 않았을 때 처리
            if(!itemList.contains(data[index])){
                
                //1.1.1 item을 itemList에 추가한다.
                itemList.add(data[index]);
                
                //1.1.2 item이 몇개 들어있는지 세어서 cntList에 추가한다.
                int cnt = 0;
                for(int searchIndex = index; searchIndex < data.length; searchIndex++){
                    if(data[index] == data[searchIndex]){
                        cnt++;
                    }
                }
                cntList.add(cnt);
                
                //1.1.3 cnt를 비교하여 itemList와 cntList를 높은순으로 정렬한다.
                for(int sourceIndex = 0 ; sourceIndex < cntList.size()-1 ; sourceIndex++){
                    for(int targetIndex = sourceIndex+1 ; targetIndex < cntList.size() ; targetIndex++){
                        if(cntList.get(sourceIndex) < cntList.get(targetIndex)){
                            int moveItem = 0;
                            
                            //cntList 위치 변경
                            moveItem = cntList.get(targetIndex);
                            cntList.set(targetIndex, cntList.get(sourceIndex));
                            cntList.set(sourceIndex, moveItem);
                            
                            //itemList 위치 변경
                            moveItem = itemList.get(targetIndex);
                            itemList.set(targetIndex, itemList.get(sourceIndex));
                            itemList.set(sourceIndex, moveItem);
                            
                        }
                    }
                }
                
            //1.2 등록되어 있을 경우 처리
            }else{
                continue;
            }            
            
        }//end 데이터 유형 및 개수를 설정
        
        //2. 데이터 유형별로 중복개수만큼 출력한다.
        for (int index = 0; index < cntList.size(); index++) {
            for (int i = 0; i < cntList.get(index); i++) {
                System.out.print(itemList.get(index));
                if(index != cntList.size()-1){
                    System.out.print(“, “);
                }
            } 
        }
        
    }
}


728x90
반응형