集合

使用二分搜索树实现不可重复的集合

创建Set接口以及实现类。

public interface Set<E> {
        void add(E e);
        void remove(E e);
        boolean contains(E e);
        int getSize();
        boolean isEmpty();
}
public class BSTSet<E extends Comparable<E>> implements Set<E> {
        private BST<E> bst;
        public BSTSet() {
            bst = new BST<>();
        }
        @Override
        public void add(E e) {
            bst.add(e);
        }
        @Override
        public void remove(E e) {
            bst.remove(e);
        }
        @Override
        public boolean contains(E e) {
            return bst.contains(e);
        }
        @Override
        public int getSize() {
            return bst.size();
        }
        @Override
        public boolean isEmpty() {
            return bst.isEmpty();
        }
}

使用链表来实现不可重复的集合

public class LinkedListSet<E> implements Set<E> {
        private LinkedList<E> linkedList;
        public LinkedListSet() {
            linkedList = new LinkedList<>();
        }
        @Override
        public void add(E e) {
            //判断是否存在当前元素e
            if (!linkedList.contains(e)){
                linkedList.addFirst(e);
            }
        }
        @Override
        public void remove(E e) {
            linkedList.removeElement(e);
        }
        @Override
        public boolean contains(E e) {
            return linkedList.contains(e);
        }
        @Override
        public int getSize() {
            return linkedList.getSize();
        }
        @Override
        public boolean isEmpty() {
            return linkedList.isEmpty();
        }
}

集合复杂度分析

操作LinkedListSetBSTSet
增 addO(n)O(logn)
查 containsO(n)O(logn)
删 removeO(n)O(logn)

神秘杰克
768 声望392 粉丝

Be a good developer.