셋 인터페이스
/**
* @author andpact
* @param <E> the type of elements in this set
*/
public interface SetInterface<E> {
/**
* 지정된 요소를 삽입합니다.
* @param e 삽입할 요소
*/
void add(E e);
/**
* 지정된 요소를 삭제합니다.
* @param e 삭제할 요소
*/
void remove(E e);
/**
* 지정된 요소의 포함 여부를 조회합니다.
* @param e 조회할 요소
* @return 지정된 요소 포함 여부
*/
boolean contains(E e);
/**
* 비었는지 조회합니다.
* @return 비었는지 여부
*/
boolean isEmpty();
/**
* 요소의 개수를 반환합니다.
* @return 요소의 개수
*/
int size();
}
생성자
public class Set<E> implements SetInterface<E>{
private E[] arr;
private final static int DEFAULT_CAPACITY = 10;
private int size;
public Set() {
arr = (E[]) new Object[DEFAULT_CAPACITY];
size = 0;
}
}
CREATE 메서드
@Override
public void add(E e) {
resize();
for (int i = 0; i < size; i++) {
if (arr[i].equals(e)) return;
}
arr[size] = e;
size++;
}
DELETE 메서드
@Override
public void remove(E e) {
for (int i = 0; i < size; i++) {
if (arr[i].equals(e)) {
for (int j = i; j < size - 1; j++) {
arr[j] = arr[j + 1];
}
arr[size - 1] = null;
size--;
resize();
return;
}
}
}
@Override
public void clear() {
arr = (E[]) new Object[DEFAULT_CAPACITY];
size = 0;
}
기타 메서드
@Override
public boolean contains(E e) {
for (int i = 0; i < size; i++) {
if (arr[i].equals(e)) return true;
}
return false;
}
@Override
public boolean isEmpty() {
return size == 0;
}
@Override
public int size() {
return size;
}
private void resize() {
if (size == arr.length)
arr = Arrays.copyOf(arr, arr.length * 2);
else if (size < arr.length / 2)
arr = Arrays.copyOf(arr, Math.max(DEFAULT_CAPACITY, arr.length / 2));
}
Leave a comment