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

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

一、集合set相关功能

1.1 add()的不一样

用于链表自己没有去重的效果,所以咱们在作基于链表的集合时,须要对add()方法作一下特殊处理,以下增长一个判断便可。java

 @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()); } }

结果:git

 

这里须要说明一下就是关于咱们统计的单词数只考虑了每一个单词组成的不用,并无对单词的特殊形式作区分。github

 

在下一下节,将对本节即6.1节相关的进行分析【基于二分搜索树、链表的实现的集合Set复杂度分析】ide

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

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

相关文章
相关标签/搜索