JX405기_비트/자료구조(Data Structure)

Day08-2 자료 구조 Set

_하루살이_ 2023. 2. 2. 16:53

Set 인터페이스

package day0118;

public interface Set {

    public void add(int element);

    public boolean contains(int element);

    public int indexOf(int element);

    public void set(int index, int element);

    public void removeByIndex(int index);

    public void removeByElement(int element);

}

 

Hash Set 클래스 중복된 값은 없이, 입력된 값을 그대로 출력

package day0118;

public class HashSet implements Set{
    public int[] array = {};
    // 원본의 배열을 필드로 가지고 있기때문에 메소드의 파라미터와 리턴값에 int[]넣지 않음

    @Override
    public void add(int element) {
        if (!contains(element)){
            int[] temp = new int[array.length + 1];
            for (int i = 0; i < array.length; i++){
                temp[i] = array[i];
            }
            temp[array.length] = element;
            array = temp;
        }
    }

    @Override
    public boolean contains(int element) {
        return indexOf(element) != -1;
    }

    @Override
    public int indexOf(int element) {
        for (int i = 0; i < array.length; i++){
            if (array[i] == element){
                return i;
            }
        }
        return 0;
    }

    @Override
    public void set(int index, int element) {
        array[index] = element;
    }

    @Override
    public void removeByIndex(int index) {
        int[] temp = new int[array.length - 1];
        for (int i = 0; i < index; i++){
            temp[i] = array[i];
        }
        for (int i = index + 1; i < array.length; i++){
            temp[i - 1] = array[i];
        }

        array = temp;

    }

    @Override
    public void removeByElement(int element) {
        if (contains(element)){
            removeByIndex(indexOf(element));
        }
    }


}

 

Tree Set 클래스 중복된 값이 없이, 정렬된 상태로 출력

package day0118;

public class TreeSet implements Set{
    public int[] array = {};

    @Override
    public void add(int element) {
        if (!contains(element)){
            int[] temp = new int[array.length + 1];
            for (int i = 0; i < array.length; i++){
                temp[i] = array[i];
            }
            temp[array.length] = element;
            array = temp;

            sort();
        }
    }

    @Override
    public boolean contains(int element) {
        return indexOf(element) != -1;
    }

    @Override
    public int indexOf(int element) {
        for (int i = 0; i < array.length; i++){
            if (array[i] == element){
                return i;
            }
        }
        return -1;
    }

    @Override
    public void set(int index, int element) {
        array[index] = element;
    }

    @Override
    public void removeByIndex(int index) {
        int[] temp = new int[array.length - 1];
        for (int i = 0; i < index; i++){
            temp[i] = array[i];
        }
        for (int i = index + 1; i < array.length; i++){
            temp[i - 1] = array[i];
        }
        array = temp;
    }

    @Override
    public void removeByElement(int element) {
        if (contains(element)){
            removeByIndex(indexOf(element));
        }
    }

    public void sort(){
        for (int i = 0; i < array.length -1; i++){
            if (array[i] > array[i + 1]){
                int temp = array[i];
                array[i] = array[i + 1];
                array[i + 1] = temp;
                i = -1;
            }
        }
    }
}