什么是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) |
网友评论