Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
Tags
- 이진 탐색(binary search)
- 회고
- 코딩문제
- 코딩테스트 준비
- css
- 메서드
- 우선순위 큐(priorityqueue)
- aop
- 자바
- wil
- 코딩
- Spring
- 자료구조
- Entity
- 면접(java
- Java
- github
- 개발자 취업
- GIT
- Grafana
- 항해99
- cs 공부)준비
- 프로그래머스
- HTML
- 배열
- 정렬 알고리즘(sort algorithm)
- ArrayList
- 코딩공부
- 99클럽
- Til
Archives
- Today
- Total
hayu's 개발 일지
99클럽 코테 스터디 1일차 TIL + HashSet 본문
학습 키워드
- HashSet
공부한 내용
HashSet
- HashSet은 Set 인터페이스에서 지원하는 구현 클래스이다. → Set의 특징을 상속받는다.
- Set 은 Key의 중복을 허용하지 않고, 키로 null을 허용하지 않는다. 순서 없이 Key로만 데이터를 저장한다. / 만약, 요소의 저장 순서를 유지해야한다면 LinkedHashSet 클래스를 사용하면 된다.
- 여기에서 Key는 요소를 말한다.
- Set의 가장 큰 장점은 중복을 자동으로 제거해준다는 것이다.
- Set은 비선형 구조이기 때문에 순서가 없다. 즉, 인덱스가 존재하지 않는다. 값을 추가하거나 삭제할 때는 그 값이 Set 내부에 있는지 검색 후에 추가하거나 삭제를 해야하기 때문에 List 구조에 비해 속도가 느리다.
HashSet 변수 선언
HashSet<데이터타입> set = new HashSet<데이터 타입(생략 가능)>();
HashSet<String> set = new HashSet<>();
HashSet<Integer> set = new HashSet<Integer>();
HashSet 의 장점
- 효츌적이고 빠른 성능 : HashSet은 요소 추가, 제거 및 검색과 같은 기본 작업에 대해 일정한 시간 복잡도를 제공한다.
- 중복되지 않는 요소 : HashSet은 중복 요소를 포함하지 않는다.
- 유연성 : HashSet은 사용자 정의 클래스를 포함하여 모든 유형의 객체를 저장할 수 있다.
- 순서 유지 x : HashSet은 요소가 추가되는 순서를 유지하지 않는다.
HashSet 메서드
데이터 추가 - add()
- HashSet은 중복 요소를 허용하지 않으므로 동일한 요소를 다시 추가하려고 하면 무시된다.
HashSet<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Orange");
set.add("Apple");
System.out.println(set);
// 출력 : [Apple, Orange, Banana]
데이터 삭제 - remove()
- 요소 제거 메서드이다.
HashSet<String> set1 = new HashSet<>();
set1.add("Apple");
set1.add("Banana");
set1.add("Orange");
set1.remove("Banana");
System.out.println(set1);
// 출력 : [Apple, Orange]
크기 구하기 - size()
HashSet<String> set2 = new HashSet<>();
set2.add("Apple");
set2.add("Banana");
set2.add("Orange");
System.out.println("set2의 크기 : " + set2.size());
//출력 : set2의 크기 : 3
데이터 포함 여부 확인 - contains()
- set에 값이 포함되어 있는지 확인한다. true/false를 반환한다.
HashSet<String> set1 = new HashSet<>();
set1.add("Apple");
set1.add("Banana");
set1.add("Orange");
set1.remove("Banana");
System.out.println(set1);
System.out.println("Apple을 포함하나요?" + set1.contains("Apple"));
System.out.println("Banana를 포함하나요?" + set1.contains("Banana"));
// 출력 : [Apple, Orange]
// 출력 : Apple을 포함하나요?true
// 출력 : Banana를 포함하나요?false
데이터 전체 출력 - toString()
- toString 메서드를 통해 전체 값을 출력할 수 있다. 그리고 HashSet은 값을 하나씩 꺼낼 수 없기 때문에 for, iterator를 사용하여 하나씩 꺼낸다.
HashSet<String> set2 = new HashSet<>();
set2.add("Apple");
set2.add("Banana");
set2.add("Orange");
//toString 사용
System.out.println(set2.toString());
//출력 : [Apple, Orange, Banana]
//for문 사용
for (String element : set2) {
System.out.print(element + " ");
}
System.out.println();
//출력 : Apple Orange Banana
//iterator 사용
Iterator<String> iterator = set2.iterator();
while (iterator.hasNext()) {
System.out.print(iterator.next() + " ");
}
//출력 : Apple Orange Banana
회고
발생한 문제
- 코딩 문제를 풀다가 HashSet에 대한 공부가 부족했음을 깨닫게 되었다. 그래서 이번 기회에 HashSet을 공부해보았다.
해결 방법
- HashSet에 대한 개념부터 사용 메서드까지 공부하여 정리해보았다.
알게된 내용
- 중복이 안되는 경우에 사용하면 좋은 자료구조라는 생각이 들었다. 순서가 없어서 검색에서는 시간이 List보다 많이 든다는 것도 알게 되었다.
추후 학습할 내용
- 또 다른 자료구조 공부를 할 생각이다. 아직 공부할 부분이 많아서 무엇을 먼서 공부할지 고민이다.
참고 자료
- https://seasome1.com/%ec%9e%90%eb%b0%94-hashset/
- https://kadosholy.tistory.com/119
'자료구조&알고리즘' 카테고리의 다른 글
99클럽 코테 스터디 3일차 TIL + Vector (0) | 2024.05.23 |
---|---|
99클럽 코테 스터디 2일차 TIL + Hash (0) | 2024.05.22 |
[TIL]240518 LinkedList (0) | 2024.05.18 |
[TIL]240517 ArrayList 메서드 (0) | 2024.05.17 |
[TIL]240516 ArrayList (0) | 2024.05.16 |