Java底层基于链表实现集合和映射--集合Set操作详解

 更新时间:2020年03月29日 13:02:53   转载 作者:WFaceBoss  
这篇文章主要介绍了Java底层基于链表实现集合和映射集合Set操作,结合实例形式详细分析了Java使用链表实现集合和映射相关原理、操作技巧与注意事项,需要的朋友可以参考下

本文实例讲述了Java底层基于链表实现集合和映射--集合Set操作。分享给大家供大家参考,具体如下:

Java底层基于二叉搜索树实现集合和映射中我们实现了底层基于二叉搜索树的集合,本节就底层如何基于链表实现进行学习,注意:此处的链表是之前自己封装的.

1、集合set相关功能

1.1 add()的不同

用于链表本身没有去重的效果,因此我们在做基于链表的集合时,需要对add()方法做一下特殊处理,如下增加一个判断即可。

 @Override
  public void add(E e) {
    if (!list.contains(e)) {
      list.addFirst(e);
    }
  }

2.集合实现

2.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

public class LinkedListSet<E> implements Set<E> {

  private LinkedList<E> list;


  public LinkedListSet() {
    list = new LinkedList<E>();
  }


  @Override
  public int getSize() {
    return list.getSize();
  }

  @Override
  public boolean isEmpty() {
    return list.isEmpty();
  }

  @Override
  public boolean contains(E e) {
    return list.contains(e);
  }

  @Override
  public void add(E e) {
    if (!list.contains(e)) {
      list.addFirst(e);
    }
  }


  @Override
  public void remove(E e) {
    list.removeElement(e);
  }
}

3.3测试:两本名著的词汇量 和不重复的词汇量

import java.util.ArrayList;

public class LinkedListSetTestDemo {
  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());

    LinkedListSet<String> set1 = new LinkedListSet<>();
    //增强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());

    LinkedListSet<String> set2 = new LinkedListSet<>();
    //增强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程序设计有所帮助。

相关文章

  • Spring实战之Bean的作用域request用法分析

    Spring实战之Bean的作用域request用法分析

    这篇文章主要介绍了Spring实战之Bean的作用域request用法,结合实例形式分析了spring中Bean的request作用域相关使用技巧与操作注意事项,需要的朋友可以参考下
    2019-11-11
  • Java的文档注释之生成帮助文档的实例

    Java的文档注释之生成帮助文档的实例

    下面小编就为大家分享一篇Java的文档注释之生成帮助文档的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • java 设计模型之单例模式详解

    java 设计模型之单例模式详解

    本文主要介绍了java 单例模式,单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在,希望能帮助有需要的同学
    2016-07-07
  • JDBC使用游标实现分页查询的方法

    JDBC使用游标实现分页查询的方法

    这篇文章主要介绍了JDBC使用游标实现分页查询的方法,实例分析了jdbc查询过程中游标的使用及查询分页相关实现技巧,需要的朋友可以参考下
    2016-08-08
  • 详解Spring框架入门

    详解Spring框架入门

    这篇文章主要介绍了详解Spring框架入门,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Java实现的按照顺时针或逆时针方向输出一个数字矩阵功能示例

    Java实现的按照顺时针或逆时针方向输出一个数字矩阵功能示例

    这篇文章主要介绍了Java实现的按照顺时针或逆时针方向输出一个数字矩阵功能,涉及java基于数组遍历、运算的矩阵操作技巧,需要的朋友可以参考下
    2018-01-01
  • Java中的常量避免反模式的方法

    Java中的常量避免反模式的方法

    这篇文章主要介绍了Java中的常量避免反模式的方法,需要的朋友可以参考下
    2015-12-12
  • Java资源缓存 之 LruCache

    Java资源缓存 之 LruCache

    LruCache (此类在android-support-v4的包中提供) 这个类非常适合用来缓存图片,它的主要算法原理是把最近使用的对象用强引用存储在 LinkedHashMap 中,并且把最近最少使用的对象在缓存值达到预设定值之前从内存中移除。
    2016-08-08
  • Java设计模式模板方法(Template)原理解析

    Java设计模式模板方法(Template)原理解析

    这篇文章主要介绍了Java设计模式模板方法(Template)原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • 详解Java编程中面向字符的输出流

    详解Java编程中面向字符的输出流

    这篇文章主要介绍了Java编程中面向字符的输出流,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-10-10

最新评论