6.1 集合和映射--集合Set->底层基于二叉搜索树实现
前言:在第5章的系列学习中,已经实现了关于二叉搜索树的相关操作,详情查看第5章即可。在本节中着重学习使用底层是我们已经封装好的二叉搜索树相关操作来实现一个基本的集合(set)这种数据结构。
集合set的特性:
集合Set存储的元素是无序的、不可重复的。为了能达到这种特性就需要寻找可以作为支撑的底层数据结构。
这里选用之前自己实现的二叉搜索树,这是由于该二叉树是不能盛放重复元素的。因此我们可以使用二叉搜索树这种底层来实现集合(set)。
1、集合set相关功能

1.1 add()方法特性
二分搜索树的添加操作add:不能盛放重复元素
2. set应用
典型应用:1.客户统计 2.词汇量统计
3.集合实现
3.1 Set接口定义
/**
* 集合的接口
*/
public interface Set<E> {
void add(E e);//添加 <——<不能添加重复元素
void remove(E e);//移除
int getSize();//获取大小
boolean isEmpty();//是否为空
boolean contains(E e);//是否包含元素 }
3.2 基于二分搜索树实现集合Set
//基于BST二分搜索树实现的集合Set
public class BSTSet<E extends Comparable<E>> implements Set<E> {//元素E必须满足可比较的 //基于BST类的对象
private BST<E> bst; //构造函数
public BSTSet() {
bst = new BST<>();
} //返回集合大小
@Override
public int getSize() {
return bst.size();
} //返回集合是否为空
@Override
public boolean isEmpty() {
return bst.isEmpty();
} //Set添加元素
@Override
public void add(E e) {
bst.add(e);
} //是否包含元素
@Override
public boolean contains(E e) {
return bst.contains(e);
} //移除元素
@Override
public void remove(E e) {
bst.remove(e);
}
}
3.3测试:两本名著的词汇量 和不重复的词汇量
public static void main(String[] args) {
System.out.println("Pride and Prejudice");
//新建一个ArrayList存放单词
ArrayList<String> words1=new ArrayList<>();
//通过这个方法将书中所以单词存入word1中
FileOperation.readFile("pride-and-prejudice.txt",words1);
System.out.println("Total words : "+words1.size());
BSTSet<String> set1=new BSTSet<>();
//增强for循环,定一个字符串word去遍历words
//底层的话会把ArrayList words1中的值一个一个的赋值给word
for(String word:words1)
set1.add(word);//不添加重复元素
System.out.println("Total different words : "+set1.getSize());
System.out.println("-------------------");
System.out.println("Pride and Prejudice");
//新建一个ArrayList存放单词
ArrayList<String> words2=new ArrayList<>();
//通过这个方法将书中所以单词存入word1中
FileOperation.readFile("a-tale-of-two-cities.txt",words2);
System.out.println("Total words : "+words2.size());
BSTSet<String> set2=new BSTSet<>();
//增强for循环,定一个字符串word去遍历words
//底层的话会把ArrayList words1中的值一个一个的赋值给word
for(String word:words2)
set2.add(word);//不添加重复元素
System.out.println("Total different words : "+set2.getSize());
}
结果:

这里需要说明一下就是关于我们统计的单词数只考虑了每个单词组成的不用,并没有对单词的特殊形式做区分。
在下一小节中继续学习【集合和映射--集合Set->底层基于链表实现】。
源码地址https://github.com/FelixBin/dataStructure/tree/master/src/SetPart
推荐是最好的支持,关注是最大的鼓励。亲爱的朋友,很荣幸在园子里遇到您。
6.1 集合和映射--集合Set->底层基于二叉搜索树实现的更多相关文章
- 6.2 集合和映射--集合Set->底层基于链表实现
在6.1中我们实现了底层基于二叉搜索树的集合,本节就底层如何基于链表实现进行学习,注意:此处的链表是之前自己封装的. 1.集合set相关功能 1.1 add()的不同 用于链表本身没有去重的效果,因此 ...
- [Java核心技术]第九章-集合(Java集合框架、具体的集合、映射)
9.1Java集合框架 一些有的没的 可以使用接口类型存放集合的引用.一旦改变了想法,只需要在调用构造函数的地方做一处修改. add方法用于向集合添加元素,如果添加元素确实改变了集合就返回true. ...
- Hibernate映射集合属性
Hibernate要求持久化集合属性字段必须声明为接口,实际的接口可以是java.util.Set,java.util.Collection,java.util.List,java.util.Map, ...
- 集合Set映射一对多(使用xml文件)
如果持久化类设置了包含实体引用的对象,则需要使用一对多关联来映射集合(Set)元素. 我们可以通过任意一个Set集合来映射这个列表对象. 下面来看看看设置对象的持久化类. 在这种情况下,一个问题可以有 ...
- (转)Hibernate框架基础——映射集合属性
http://blog.csdn.net/yerenyuan_pku/article/details/52745486 集合映射 集合属性大致有两种: 单纯的集合属性,如像List.Set或数组等集合 ...
- JavaScript中数组的集合和映射
集合 集合(set)是在ES6中引入的一种数据结构,用于表示唯一值的集合,所以它不能包含重复值.接 下来这一小节,就让我们具体来看一下这种新的数据结构. Set集合是一种无重复元素的列表,这是这种数据 ...
- 集合和映射(Set And Map)
目录 集合 Set 基于二分搜索树实现集合 基于链表实现集合 集合的时间复杂度分析 映射 Map 基于链表实现映射 基于二分搜索树实现映射 映射的时间复杂度分析 leetcode上关于集合和映射的问题 ...
- 红黑树规则,TreeSet原理,HashSet特点,什么是哈希值,HashSet底层原理,Map集合特点,Map集合遍历方法
==学习目标== 1.能够了解红黑树 2.能够掌握HashSet集合的特点以及使用(特点以及使用,哈希表数据结构) 3.能够掌握Map集合的特点以及使用(特点,常见方法,Map集合的遍历) 4.能够掌 ...
- java学习笔记—集合之Map集合
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 12.0px Times } p.p2 { margin: 0.0p ...
随机推荐
- Linux可以生产uImage
默认kernel只生产Image和zImage,若想让kernel生产uImage,需要用到mkimage,这个是uboot可以提供的,位于uboot/tool/目录下,将其加入到环境变量即可.
- IDEA远程连接Hadoop
IDEA远程连接Hadoop Win 1.Hadoop配置 下载并配置到本地环境 HADOOP_HOME D:\Tools\hadoop-2.7.7\hadoop-2.7.7 HADOOP_PREFI ...
- 自己写的C#三层代码生成器
思来想去用T4生成代码要学习它的语法,C#本身能很简单地生成txt文件,为啥不直接批量替换模板方式自己写个的三层代码生成器.说干就干,2个小时搞定.当然各层还可以做的更精细,比如DAL层的Add方法I ...
- Java技术学习之影响MySQL性能的配置参数
本文将介绍MySQL参数的五大类设置,平时我们一般都很少碰它们,在进行MySQL性能调优和故障诊断时这些参数还是非常有用的. (一)连接连接通常来自Web服务器,下面列出了一些与连接有关的参数,以及该 ...
- day02 格式化字符串
字符格式化2019-04-01 方法一 通过f + {} 格式化字符串 name = input("Name: ")age = input("Age:")sco ...
- 常用git的命令
常用git的命令 详解git fetch与git pull的区别 Git放弃本地所有修改,强制更新: git fetch --all git reset --hard origin/master 说明 ...
- 安装.net 服务时出现0x80131515错误的解决办法
使用InstallUtil.exe安装一个用.NET写的Windows服务时,报错了,错误信息如下: Exception occurred while initializing the install ...
- CentOS7 搭建 SVN 服务器
CentOS7 搭建 SVN 服务器 介绍SVN: SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上 ...
- 平安技术开放日质量保证技术专场第一期 [附部分 ppt]
4月8号在上海平安大厦,平安证券和Tester联合举办了一场质量保证技术专场,附上部分PPT 平安技术开放日介绍 ppt下载 A/B测试的大数据架构实践 链接: http://pan.baidu. ...
- mac中更改xampp的根目录
方法一: 1 打开 应用程序->XAMPP->xamppfiles->etc->httpd.conf 文档 2 commond+f搜索htdocs,搜到如下结果 # Docum ...