-
[JAVA] 정수, 문자열 중복 제거 (Set 컬렉션)업무 중 배움 2022. 1. 4. 17:41
[상황]
입력 받은 정수, 문자열 데이터 중복 제거 후 반환
[해결]
Set 컬렉션 클래스 사용
* 정수는 Set 컬렉션 클래스 / 문자열은 contain 함수 이용
- JDK 1.2부터 제공된 HashSet 클래스는 해시 알고리즘(hash algorithm)을 사용하여 검색 속도가 매우 빠름
- HashSet 클래스는 Set 인터페이스를 구현하므로, 요소를 순서에 상관없이 저장하고 중복된 값은 저장하지 않음
- 요소의 저장 순서를 유지해야 한다면 JDK 1.4부터 제공하는 LinkedHashSet 클래스를 사용
* 해시 알고리즘(hash algorithm)
자바에서 해시 알고리즘을 이용한 자료 구조는 위의 그림과 같이 배열과 연결 리스트로 구현
저장할 데이터의 키값을 해시 함수에 넣어 반환되는 값으로 배열의 인덱스를 구함
그리고서 해당 인덱스에 저장된 연결 리스트에 데이터를 저장
* 컬렉션의 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
http://www.tcpschool.com/java/java_collectionFramework_set
'업무 중 배움' 카테고리의 다른 글
[JAVA] 로그에서 아이피 추출하기 (정규식) (0) 2021.12.28 [mysql] 없는 날짜에 데이터 0 처리 하는 방법 (0) 2021.12.20