JAVA HashSet으로 List 중복값 체크

KSOJIN·2023년 6월 24일
0

taxcare

목록 보기
3/10
post-thumbnail

🔸HashSet 이란?

  • 집합 데이터 자료구조로 특정 원소를 검색하는 용도가 아닌 대상 원소가 집합에 존재하는지 여부를 확인하는 용도로 많이 사용된다. ( Fast Lookup )
  • 데이터를 비순차적으로 저장한다. ( 순서를 보장하지 않음 )
  • 데이터를 중복으로 삽입할 수 없다.
HashSet<String> menu_Set = new HashSet<String>();

menu_Set.add("짜장면"); //데이터 삽입
menu_Set.add("짬뽕");
menu_Set.add("파스타");

menu_Set.add("짜장면"); //중복 데이터

System.out.println(menu_Set.size()); // 3 (중복 불가)

if(menu_Set.contains("파스타")) { //데이터 검색
	menu_Set.remove("파스타"); //데이터 삭제
    //menu_Set.clear(); //전체삭제
}

System.out.println(menu_Set); // 전체출력

Iterator iter = menu_Set.iterator();
while(iter.hasNext(){
	System.out.println(iter.next()); // 하나씩 출력
}

▼ 이런 특징을 활용해 ArrayList에 중복값이 있는지 간단하게 체크할 수 있다.

List<String> menu_List = new ArrayList<String>();
menu_List.add("탕수육");
menu_List.add("짜장면");
menu_List.add("볶음밥");
menu_List.add("짜장면"); //중복 데이터

//List를 Set으로 변환하면서 중복값 제거
HashSet<String> mn_Set = new HashSet<String>(menu_List);
//때문에 List일 때 사이즈랑 Set일 때 사이즈가 다르면 중복 값이 존재한다는 뜻
if(menu_List.size() != mn_Set.size())
	System.out.println("중복데이터 존재!!");
  • 이처럼 Set을 활용하면 중복되는 데이터가 있을 경우 특정 기능을 수행해야 할 때 활용할 수 있다.

▼ 하지만 중복되는 데이터가 무엇인지 찾으려면 indexOf 와 lastIndexOf 를 같이 활용해야 한다.

List<String> menu_List = new ArrayList<String>();
menu_List.add("유산슬");
menu_List.add("깐풍기");
menu_List.add("깐쇼새우");
menu_List.add("깐풍기"); //중복 데이터
menu_List.add("깐쇼새우"); //중복 데이터

HashSet<String> dupl_Set = new HashSet<String>;

for(String menu : menu_List) {

	//indexOf : List의 앞쪽부터 체크해 인덱스 리턴
    //lastIndexOf : List의 뒤쪽부터 체크해 인덱스 리턴
    
	if(menu_List.indexOf(menu) != menu_List.lastIndexOf(menu)){
    	dupl_Set.add(menu); //List의 중복 데이터가 중복없이 Set에 추가됨
    }
    
    System.out.println(dupl_Set); //[ 깐풍기, 깐쇼새우 ]
}

0개의 댓글