자바

JAVA STEP 39. Hashset 직접 구현하기

2023. 2. 24. 18:46
728x90

★ MySet 클래스를 직접 구현

  • 조건
  • 1. 행동
    • boolean add(String value)
      • 배열에 요소를 추가한다.
      • value: 추가할 요소
      • return: 성공 유무
    • int size()
      • 요소의 개수를 반환한다.
      • return: 요소의 개수
    • boolean remove(String value)
      • 배열의 요소를 삭제한다.
      • s: 삭제할 요소
      • return: 성공 유무
    • void clear()
      • 배열의 모든 요소를 삭제한다.
    • boolean hasNext()
      • 다음 요소가 있는지 확인한다.
      • return: 존재 유무
    • String next()
      • 다음 요소를 반환한다.
      • return: 다음 요소
  • 2. 소스코드
  •  
public class MySet {
	private String [] list;
	private int index;
	private int nextIndex;
	
	public MySet() {
		this.list = new String[4];
		this.index = 0;
		this.nextIndex = 0;
	}
	
	public boolean add(String value) {
		
		//인자값을 배열에 차례대로 넣기 > Append
		
		//검사 > 방이 모자란지? > 배열 2배 확장(깊은 복사)
		if(duplicate(value)) {
			return false;
		}
		
		if(checkList()) {
			doubleList();
		}
		this.list[this.index] = value;
		this.index++;
		
		return true;
	}
	public boolean duplicate(String value) {
		
		for(int i=0; i<index; i++) {
			if(list[i].equals(value)) {
				return true;
			}
		}
		return false;
	}
	//index의 길이가 현재 list의 길이와 같은지 즉, 방이 꽉찼는지 검사
	public boolean checkList() {
		if(this.index == this.list.length) {
			return true;
		}
		return false;
	}
	//배열의 길이가 꽉 찼다면, 배열의 길이를 2배로 늘려주는 연산
	public void doubleList() {
		String[] temp = new String[this.list.length*2];
		
		for(int i=0; i<this.list.length; i++) {
			temp[i] = this.list[i];
		}
		this.list = temp;
	}
	
	public int size() {
		return this.index;
	}
	
	public String remove(String value) {
		int index = -1;
		
		for(int i=0; i<this.index; i++) {
			if(this.list[i].equals(value)) {
				index = i;
				break;
			}
		}
		for (int i=index; i<this.list.length-1; i++) {
			list[i] = list[i+1];
		}
		this.index--;
		return "삭제된 요소  : " + value;
	}
	
	public void clear() {
		String [] temp = new String[4];
		
		this.list = temp;
		
		this.index = 0;
	}
	
	public boolean hasNext() {
		
		if(nextIndex < this.index) {
			return true;
		}
		return false;
	}
	
	public String next() {
		
		String temp = this.list[nextIndex];
		nextIndex++;
		return temp;
	}
	
	public String toString() {
		String temp = "";
		
		temp += "\n";
		temp += String.format("length : %d\n", list.length);
		temp += String.format("index : %d\n", index);
		temp += "\n";
		
		for(int i=0; i<this.list.length; i++) {
			temp += String.format(" %d: %s\n", i, this.list[i]);
		}
		temp += "\n";
		return temp;
	}
}
public class Q0108 {

	public static void main(String[] args) {
		//배열 생성
		MySet list = new MySet();

		//추가
		list.add("홍길동");
		list.add("아무개");
		list.add("하하하");

		//개수
		System.out.println(list.size());

		//삭제
		list.remove("아무개");

		//개수
		System.out.println(list.size());

		//탐색 + 읽기
		while (list.hasNext()) {
		      System.out.println(list.next());
		}
		System.out.println(list);
		
		//초기화
		list.clear();
		System.out.println(list.size());
		
		System.out.println(list);

	}

}

 

  • 3. 실행결과

MySet 실행결과

728x90
저작자표시 비영리 변경금지 (새창열림)

'자바' 카테고리의 다른 글

JAVA STEP 41. File/Directory 조작 예제  (0) 2023.02.24
JAVA STEP 40. File/Directory 조작  (0) 2023.02.24
JAVA STEP 38. 컬렉션(HashSet)  (0) 2023.02.24
JAVA STEP 37. HashMap 직접 구현하기  (0) 2023.02.24
JAVA STEP 36. 컬렉션(HashMap)  (0) 2023.02.24
'자바' 카테고리의 다른 글
  • JAVA STEP 41. File/Directory 조작 예제
  • JAVA STEP 40. File/Directory 조작
  • JAVA STEP 38. 컬렉션(HashSet)
  • JAVA STEP 37. HashMap 직접 구현하기
IT의 큰손
IT의 큰손
IT계의 큰손이 되고 싶은 개린이의 Log 일지
Developer Story HouseIT계의 큰손이 되고 싶은 개린이의 Log 일지
IT의 큰손
Developer Story House
IT의 큰손
전체
오늘
어제
  • 분류 전체보기 (457)
    • 정보처리기사 필기 (18)
    • 정보처리기사 실기 (12)
    • 정보처리기사 통합 QUIZ (12)
    • 빅데이터 (11)
    • 안드로이드 (11)
    • 웹페이지 (108)
    • 자바 (49)
    • SQLD (3)
    • 백준 알고리즘 (76)
    • 데이터베이스 (41)
    • 깃허브 (2)
    • Library (14)
    • Server (31)
    • 크롤링&스크래핑 (3)
    • Spring (23)
    • Vue.js (13)
    • React (27)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Developer Stroy House

인기 글

태그

  • 알고리즘
  • 웹개발자
  • IT개발자
  • java
  • jsp
  • 정보보안전문가
  • 백엔드
  • css
  • 정보처리기사
  • 앱개발자
  • DBA
  • IT자격증공부
  • JavaScript
  • 개발블로그
  • html
  • 정보처리기사필기
  • 자바
  • ajax
  • 프론트엔드
  • jquery
  • 웹페이지
  • 코딩테스트
  • 웹개발
  • 데이터베이스
  • IT자격증
  • 백준
  • React
  • it
  • DB
  • 개발자

최근 댓글

최근 글

Designed By hELLO
IT의 큰손
JAVA STEP 39. Hashset 직접 구현하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.