在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學習
推薦是最好的支持,關注是最大的鼓勵。親愛的朋友,很榮幸在園子裏遇到您。測試