美文网首页
基于二分搜索树和链表实现的Set集合

基于二分搜索树和链表实现的Set集合

作者: 不服输的小蜗牛 | 来源:发表于2020-06-19 09:47 被阅读0次

什么是Set集合?
set集合是无序的,不可指定位置访问,不包含重复元素的集合,比如说我们要统计一本英语书中有多少的单词量,这个时候我们就可以使用set集合来存储单词。

二分搜索树来实现Set集合。首先定义个接口类型的Set类,规定好BSTSet和LinkedSet里面的共同方法


public interface Set<E> {

    void add(E e);

    void remove(E e);

    boolean contains(E e);

    int getSize();

}

二分搜索树树中的元素都是具有可比性的,所以存储的元素都有继承Comparable类

public class BSTSet <E extends Comparable<E>> implements Set<E> {

    private BSTree<E> bsTree;

    public BSTSet() {
        bsTree = new BSTree<>();
    }

    @Override
    public void add(E e) {
        bsTree.add(e);
    }

    @Override
    public void remove(E e) {
        bsTree.remove(e);
    }

    @Override
    public boolean contains(E e) {
        return bsTree.contains(e);
    }

    @Override
    public int getSize() {
        return bsTree.getSize();
    }
}


LinkedSet

public class LinkedSet<E> implements Set<E> {
    private LinkedList<E> linkedList;

    public LinkedSet() {
        linkedList = new LinkedList<>();
    }

    @Override
    public void add(E e) {
        //set集合中存储的元素中没有重复元素,
    //所以在链表添加时,要先判断下是否包含,如果不包含在去添加元素
        if(!linkedList.contains(e)){
            linkedList.addFirst(e);
        }
    }

    @Override
    public void remove(E e) {
        linkedList.remove(e);
    }

    @Override
    public boolean contains(E e) {
        return linkedList.contains(e);
    }

    @Override
    public int getSize() {
        return linkedList.getSize();
    }
}


方法 BSTSet时间复杂度 LinkedSet时间复杂度
add O(n) O(logn)
remove O(n) O(logn)
contains O(n) O(logn)

相关文章

网友评论

      本文标题:基于二分搜索树和链表实现的Set集合

      本文链接:https://www.haomeiwen.com/subject/nigmxktx.html