关于java:数据结构之集合

汇合

应用二分搜寻树实现不可反复的汇合

创立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();
        }
}

汇合复杂度剖析

操作 LinkedListSet BSTSet
增 add O(n) O(logn)
查 contains O(n) O(logn)
删 remove O(n) O(logn)

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理