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: 다음 요소
- boolean add(String value)
- 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. 실행결과
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 |