ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] 정수, 문자열 중복 제거 (Set 컬렉션)
    업무 중 배움 2022. 1. 4. 17:41

    [상황]

    입력 받은 정수, 문자열 데이터 중복 제거 후 반환

     

    [해결]

    Set 컬렉션 클래스 사용

     

    * 정수는 Set 컬렉션 클래스 / 문자열은 contain 함수 이용

    http://www.tcpschool.com/java/java_collectionFramework_set

    - JDK 1.2부터 제공된 HashSet 클래스해시 알고리즘(hash algorithm)을 사용하여 검색 속도가 매우 빠름

    - HashSet 클래스는 Set 인터페이스를 구현하므로, 요소를 순서에 상관없이 저장하고 중복된 값은 저장하지 않음

    - 요소의 저장 순서를 유지해야 한다면 JDK 1.4부터 제공하는 LinkedHashSet 클래스사용

     

    * 해시 알고리즘(hash algorithm)

    http://www.tcpschool.com/java/java_collectionFramework_set

    자바에서 해시 알고리즘을 이용한 자료 구조는 위의 그림과 같이 배열연결 리스트로 구현

    저장할 데이터의 값을 해시 함수에 넣어 반환되는 값으로 배열의 인덱스를 구함

    그리고서 해당 인덱스에 저장된 연결 리스트에 데이터를 저장

     

    * 컬렉션의 sort 함수 이용 (오름차순)

    -> 정렬이 되는 기준은 오름차순으로 숫자 > 대문자 > 소문자 > 한글순 으로 정렬이 된다. 

    -> 반대 (내림차순)는  

    Collenctions.reverse( list );

     

    [코드]

    package java_study;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Set;
    
    public class Array_Duplication_Check {
    
    	public static void main(String[] args) {
    		
    		// 정수
    		int[] arr = {1,1,1,1,2,3,4,5,6,7,8,5,4,4,5,2,1,1};
    		System.out.println("정수 정렬전:" + arr.length);
    		System.out.println("-----------------------");
    		
    		for(int i : arr) System.out.print(i + " ");
    		
    		System.out.println();
    		System.out.println("-----------------------");
    		System.out.println();
    		System.out.println();
    		
    		Set<Integer> set = new HashSet<Integer>();
    		for(int i : arr) set.add(i);
    
    
    		List<Integer> list1 = new ArrayList<Integer>(set);
    		// 정렬
    		Collections.sort(list1);
    
    		System.out.println("정수 정렬후:" + list1.size());
    		System.out.println("-----------------------");
    		for(int i : list1) System.out.print(i + " ");
    		System.out.println();
    		System.out.println("-----------------------");
    		
    		System.out.println();
    		System.out.println();
    		System.out.println();
    		
    		// 문자열
    		String[] sArr = {"스타벅스", "커피빈", "이디야", "스타벅스", "매머드", "블랙콩", "컴포즈", "커피에 반하다", "커피 베이", "커피베이", "매머드", "커피에반하다"};
    		System.out.println("문자열 정렬전:" + sArr.length);
    		System.out.println("-----------------------");
    		
    		for(int i=0; i<sArr.length; i++) System.out.print(sArr[i] + " ");
    		
    		System.out.println();
    		System.out.println("-----------------------");
    		System.out.println();
    
    		List<String> list2 = new ArrayList<String>();
    		for(int i=0; i<sArr.length; i++)
    			if(!list2.contains(sArr[i].replaceAll("\\s", "")))	// list에 포함되어있는지 아닌지 체크 (모든공백제거 replaceAll("\\s", ""))
    				list2.add(sArr[i].replaceAll("\\s", ""));		// 해당 값이 없으면 넣기
    		
    		// 정렬 <-> Collections.reverse(list2); 내림차순
    		Collections.sort(list2);
    		        
            
    		System.out.println("문자열 정렬후:" + list2.size());
    		System.out.println("-----------------------");
    		for(String i : list2) System.out.print(i + " ");
    		System.out.println();
    		System.out.println("-----------------------");
    
    	}
    
    }

     

     

    참조: https://blog.naver.com/zzang9ha/221848934382

     

    [Java/자바] - 배열에서 중복을 제거하고 정렬하기

    안녕하세요, 오늘 문득 공부하다가 배열에서 중복을 제거하고 정렬은 어떻게하면 될지 생각하다가 한 번 정...

    blog.naver.com

    http://www.tcpschool.com/java/java_collectionFramework_set

     

    코딩교육 티씨피스쿨

    4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

    tcpschool.com

     

    댓글

Designed by Tistory.