欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

二分搜索树与集合

时间:2023-06-10

1、集合的定义:集合用于存储不重复元素的容器,可以由链表实现linkedSet,是有序的,也可以由二分搜索树实现TreeSet是有序,自然排序。

2、集合set接口的定义:

public interface Set extends Iterable{//向集合中添加元素public void add(E element);//删除集合中指定元素public void remove(E element);//判断集合中是否包含指定元素public boolean contains(E element);//获取集合中有效元素个数public int size();//判断集合是否为空public boolean isEmpty();}

3、底层通过二分搜索树实现集合:

//定义TreeSet 底层通过二分搜索树来实现集合Set//二分搜索树中的数据必须具有可比性 因此二分搜索树中的数据必须都是Comparable实现子类public class TreeSet> implements Set{private BinarySearchTree tree;public TreeSet() {tree = new BinarySearchTree();}//向集合中添加元素@Overridepublic void add(E element) {tree.addRe(element);}//删除集合中指定元素@Overridepublic void remove(E element) {tree.remove(element);}//获取集合中有效元素个数@Overridepublic int size() {return tree.size();}//判断集合中是否包含指定元素@Overridepublic boolean contains(E element) {return tree.containsRe(element);}//判断集合是否为空@Overridepublic boolean isEmpty() {return tree.isEmpty();}//规定及和输出的格式@Overridepublic String toString() {return tree.toString();}//迭代集合@Overridepublic Iterator iterator() {return tree.iterator();}}

4、底层通过链表实现集合:

//定义linkedSet 底层通过linkedList来实现Set//通过linkedList来实现的集合Set中的数据不需要具有可比性public class linkedSet implements Set{linkedSinglyList list;public linkedSet() {list = new linkedSinglyList();}//向集合中添加元素@Overridepublic void add(E element) {if(!list.contains(element)) {list.add(element);}}//删除集合中指定元素@Overridepublic void remove(E element) {list.remove(element);}//获取集合中有效元素的个数@Overridepublic int size() {return list.size();}//判断集合中是否包含指定元素@Overridepublic boolean contains(E element) {return list.contains(element);}//判断集合是否为空@Overridepublic boolean isEmpty() {return list.isEmpty();}//规定集合输出的格式@Overridepublic String toString() {return list.toString();}//迭代集合@Overridepublic Iterator iterator() {return list.iterator();}}

5、两种实现方式的比较:底层通过二分搜索树实现的集合存储效率要高于底层通过链表实现的集合存储效率。

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。