博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
6.1 集合和映射--集合Set->底层基于二叉搜索树实现
阅读量:5886 次
发布时间:2019-06-19

本文共 2633 字,大约阅读时间需要 8 分钟。

前言:在第5章的系列学习中,已经实现了关于二叉搜索树的相关操作,详情查看第5章即可。在本节中着重学习使用底层是我们已经封装好的二叉搜索树相关操作来实现一个基本的集合(set)这种数据结构。

集合set的特性:
集合Set存储的元素是无序的、不可重复的。为了能达到这种特性就需要寻找可以作为支撑的底层数据结构。
这里选用之前自己实现的二叉搜索树,这是由于该二叉树是不能盛放重复元素的。因此我们可以使用二叉搜索树这种底层来实现集合(set)。

1、集合set相关功能

1.1 add()方法特性

二分搜索树的添加操作add:不能盛放重复元素

2. set应用

典型应用:1.客户统计 2.词汇量统计

3.集合实现

3.1 Set接口定义

/** * 集合的接口 */public interface Set
{ void add(E e);//添加 <——

3.2 基于二分搜索树实现集合Set

//基于BST二分搜索树实现的集合Setpublic class BSTSet
> implements Set
{
//元素E必须满足可比较的 //基于BST类的对象 private BST
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
words1=new ArrayList<>(); //通过这个方法将书中所以单词存入word1中 FileOperation.readFile("pride-and-prejudice.txt",words1); System.out.println("Total words : "+words1.size()); BSTSet
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
words2=new ArrayList<>(); //通过这个方法将书中所以单词存入word1中 FileOperation.readFile("a-tale-of-two-cities.txt",words2); System.out.println("Total words : "+words2.size()); BSTSet
set2=new BSTSet<>(); //增强for循环,定一个字符串word去遍历words //底层的话会把ArrayList words1中的值一个一个的赋值给word for(String word:words2) set2.add(word);//不添加重复元素 System.out.println("Total different words : "+set2.getSize()); }

结果:

这里需要说明一下就是关于我们统计的单词数只考虑了每个单词组成的不用,并没有对单词的特殊形式做区分。

 

在下一小节中继续学习。

 

源码地址

 

推荐是最好的支持,关注是最大的鼓励。亲爱的朋友,很荣幸在园子里遇到您。

posted on
2019-04-14 20:39 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/wfaceboss/p/10706876.html

你可能感兴趣的文章
我的友情链接
查看>>
Linux Shell从入门到删除根目录跑路指南
查看>>
深入了解MyBatis参数
查看>>
FreeBSD中安装源的方法
查看>>
浮动层代码
查看>>
1.安装zabbix server
查看>>
mongodb相关(单实例、复制集、分片集)
查看>>
快速排序的总结
查看>>
Linux系统详细启动流程
查看>>
论坛教程-去除版块导航
查看>>
linux下mysql的初始密码
查看>>
vim常用命令
查看>>
使用eclipse Maven插件创建一个web project
查看>>
我的友情链接
查看>>
成熟的标志
查看>>
慢慢的才知道
查看>>
ubuntu12.04TLS安装CodeBlocks
查看>>
待看博客
查看>>
加解密技术基础
查看>>
nginx和php-fpm优化
查看>>