6.2 集合和映射--集合Set->底层基于链表实现

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

1、集合set相关功能

image.png
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());

    }
}

结果:

image.png

这里需要说明一下就是关于我们统计的单词数只考虑了每个单词组成的不用,并没有对单词的特殊形式做区分。
在下一下节,将对本节即6.1节相关的进行分析【基于二分搜索树、链表的实现的集合Set复杂度分析】

点赞是最好的支持,关注是最大的鼓励。亲爱的朋友,很荣幸在简书遇到您。

源码地址 https://github.com/FelixBin/dataStructure/tree/master/src/SetPart

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言:在第5章的系列学习中,已经实现了关于二叉搜索树的相关操作,详情查看第5章即可。在本节中着重学习使用底层是我们...
    wfaceboss阅读 369评论 0赞 1
  • 在编程中,常常需要集中存放多个数据。集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。所有的集合类都位于...
    一一一二二三阅读 512评论 0赞 1
  • Java集合类可用于存储数量不等的对象,并可以实现常用的数据结构如栈,队列等,Java集合还可以用于保存具有映射关...
    小徐andorid阅读 2,134评论 0赞 13
  • 我对爱的感悟 2008-11-30 10:16 爱是什么? 在这个世界上有许多种爱,每个人都会经历不同的爱,母爱,...
    幽兰在空谷阅读 1,162评论 0赞 3
  • 有时候看新闻,会有这样的事:一个中国人到外国去,发生了不幸的事。 像前一段时间的美联航赶乘客下机,我当时第一个反应...
    长歌雾后阅读 483评论 4赞 3

友情链接更多精彩内容