首页 > 其他 > 详细

集合基础

时间:2020-03-01 14:28:05      阅读:52      评论:0      收藏:0      [点我收藏+]

集合基础

集合接口:

Set

  • void add(E) //该方法不能添加重复元素
  • void remove(E)
  • boolean contains(E)
  • int getSize()
  • boolean isEmpty()

接口代码的编写大概是这样:

public interface Set {
    void add(int i);
    void remove(int i);
    boolean contains(int i);
    int getSize();
    boolean isEmpty();
}

使用二分搜索树实现集合:

我实现的二分搜索树只能存储int类型的数据,如果你想要能存储其他数据,就需要用到泛型,因为二分搜索树所存储的元素都具有可比较性,所以泛型需要继承Comparable接口

public class BSTSet implements Set {

    private BST bst;

    public BSTSet(){
        bst = new BST();
    }

    @Override
    public void add(int i) {
        bst.insert(i);
    }

    @Override
    public void remove(int i) {
        bst.remove(i);
    }

    @Override
    public boolean contains(int i) {
        return bst.lookup(i);
    }

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

    @Override
    public boolean isEmpty() {
        return bst.getSize()==0;
    }
}

使用链表实现集合:

    package LinkedListSet;
    
    import java.util.LinkedList;
    
    public class LinkedListSet implements Set {

    private LinkedList list;

    public LinkedListSet(){
        list = new LinkedList();
    }

    @Override
    public void add(int i) {
        if (!list.contains(i))
            list.addFirst(i);
    }

    @Override
    public void remove(int i) {
        list.remove(i);
    }

    @Override
    public boolean contains(int i) {
        return list.contains(i);
    }

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

    @Override
    public boolean isEmpty() {
        return list.isEmpty();
    }
}

使用链表实现集合十分简单,主要的区别是在add时要多一步判断,而二分搜索树就不需要

简单分析下时间复杂度:

技术分享图片

h指的是树的高度,h与n的关系是:

技术分享图片

最差的情况指的是二分搜索树退化成链表(以顺序的或者接近顺序的输入数据来创建树),所以复杂度和链表一样。

集合基础

原文:https://www.cnblogs.com/AACFHFZFZE/p/12389557.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!