1 minute read

셋 인터페이스

/**
 * @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