在6.1中咱们实现了底层基于二叉搜索树的集合,本节就底层如何基于链表实现进行学习,注意:此处的链表是以前本身封装的.html
用于链表自己没有去重的效果,所以咱们在作基于链表的集合时,须要对add()
方法作一下特殊处理,以下增长一个判断便可。java
@Override public void add(E e) { if (!list.contains(e)) { list.addFirst(e); } }
/** * 集合的接口 */ public interface Set<E> { void add(E e);//添加 <——<不能添加剧复元素 void remove(E e);//移除 int getSize();//获取大小 boolean isEmpty();//是否为空 boolean contains(E e);//是否包含元素 }
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); } }
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学习
推荐是最好的支持,关注是最大的鼓励。亲爱的朋友,很荣幸在园子里遇到您。测试