Java底层基于二叉搜索树实现集合和映射/集合Set功能详解

 更新时间:2020年03月29日 12:35:12   作者:WFaceBoss  
这篇文章主要介绍了Java底层基于二叉搜索树实现集合和映射/集合Set功能,结合实例形式分析了Java使用二叉搜索树实现集合和映射相关操作技巧,需要的朋友可以参考下

本文实例讲述了Java底层基于二叉搜索树实现集合和映射功能。分享给大家供大家参考,具体如下:

前言:在第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

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

相关文章

  • java使用http实现文件下载学习示例

    java使用http实现文件下载学习示例

    这篇文章主要介绍了java使用http实现文件下载学习示例,需要的朋友可以参考下
    2014-04-04
  • Java实现Fibonacci(斐波那契)取余的示例代码

    Java实现Fibonacci(斐波那契)取余的示例代码

    这篇文章主要介绍了Java实现Fibonacci取余的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • SpringBoot中MockMVC单元测试的实现

    SpringBoot中MockMVC单元测试的实现

    Mock是一种用于模拟和替换类的对象的方法,以便在单元测试中独立于外部资源进行测试,本文主要介绍了SpringBoot中MockMVC单元测试的实现,具有应该的参考价值,感兴趣的可以了解一下
    2024-02-02
  • Java Socket聊天室编程(二)之利用socket实现单聊聊天室

    Java Socket聊天室编程(二)之利用socket实现单聊聊天室

    这篇文章主要介绍了Java Socket聊天室编程(二)之利用socket实现单聊聊天室的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • Java线程安全中的原子性浅析

    Java线程安全中的原子性浅析

    这篇文章主要介绍了Java线程安全中的原子性,原子性是指一条线程在执行一系列程序指令操作时,该线程不可中断。一旦出现中断,那么就可能会导致程序执行前后的结果不一致
    2023-02-02
  • 在Web项目中手机短信验证码实现的全过程记录

    在Web项目中手机短信验证码实现的全过程记录

    这篇文章主要给大家介绍了关于在Web项目中实现短信验证码的全过程记录,文中通过示例代码介绍的非常详细,在文末跟大家提供了源码下载,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2017-12-12
  • Jsoup解析html实现招聘信息查询功能

    Jsoup解析html实现招聘信息查询功能

    这篇文章主要为大家详细介绍了Jsoup解析html实现招聘信息查询功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • Java中利用Alibaba开源技术EasyExcel来操作Excel表的示例代码

    Java中利用Alibaba开源技术EasyExcel来操作Excel表的示例代码

    这篇文章主要介绍了Java中利用Alibaba开源技术EasyExcel来操作Excel表的示例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Java中的3种输入方式实现解析

    Java中的3种输入方式实现解析

    这篇文章主要介绍了Java中的3种输入方式实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Spring之@DependsOn注解详细解析

    Spring之@DependsOn注解详细解析

    这篇文章主要介绍了Spring之@DependsOn注解详细解析,@DependsOn注解是Spring中提供的一个指定Spring创建Bean的依赖顺序的注解,需要的朋友可以参考下
    2024-01-01

最新评论