6.2 集合和映射--集合Set->底層基于鏈表實現(xiàn)

在6.1中我們實現(xiàn)了底層基于二叉搜索樹的集合,本節(jié)就底層如何基于鏈表實現(xiàn)進(jìn)行學(xué)習(xí), 注意:此處的鏈表是之前自己封裝的

1、集合set相關(guān)功能

image.png
1.1 add()的不同

用于鏈表本身沒有去重的效果,因此我們在做基于鏈表的集合時,需要對add()方法做一下特殊處理,如下增加一個判斷即可。

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

2.集合實現(xiàn)

2.1 Set接口定義
/**
 * 集合的接口
 */
public interface Set<E> {
    void add(E e);//添加  <——<不能添加重復(fù)元素
    void remove(E e);//移除
    int  getSize();//獲取大小
    boolean isEmpty();//是否為空
    boolean contains(E e);//是否包含元素
    
}
3.2 基于鏈表實現(xiàn)集合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測試:兩本名著的詞匯量 和不重復(fù)的詞匯量
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<>();
        //增強(qiáng)for循環(huán),定一個字符串word去遍歷words
        //底層的話會把ArrayList words1中的值一個一個的賦值給word
        for (String word : words1)
            set1.add(word);//不添加重復(fù)元素
        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<>();
        //增強(qiáng)for循環(huán),定一個字符串word去遍歷words
        //底層的話會把ArrayList words1中的值一個一個的賦值給word
        for (String word : words2)
            set2.add(word);//不添加重復(fù)元素
        System.out.println("Total  different words : " + set2.getSize());

    }
}

結(jié)果:

image.png

這里需要說明一下就是關(guān)于我們統(tǒng)計的單詞數(shù)只考慮了每個單詞組成的不用,并沒有對單詞的特殊形式做區(qū)分。
在下一下節(jié),將對本節(jié)即6.1節(jié)相關(guān)的進(jìn)行分析【基于二分搜索樹、鏈表的實現(xiàn)的集合Set復(fù)雜度分析】

點贊是最好的支持,關(guān)注是最大的鼓勵。親愛的朋友,很榮幸在簡書遇到您。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言:在第5章的系列學(xué)習(xí)中,已經(jīng)實現(xiàn)了關(guān)于二叉搜索樹的相關(guān)操作,詳情查看第5章即可。在本節(jié)中著重學(xué)習(xí)使用底層是我們...
    wfaceboss閱讀 343評論 0 1
  • 在編程中,常常需要集中存放多個數(shù)據(jù)。集合類主要負(fù)責(zé)保存、盛裝其他數(shù)據(jù),因此集合類也被稱為容器類。所有的集合類都位于...
    一一一二二三閱讀 485評論 0 1
  • Java集合類可用于存儲數(shù)量不等的對象,并可以實現(xiàn)常用的數(shù)據(jù)結(jié)構(gòu)如棧,隊列等,Java集合還可以用于保存具有映射關(guān)...
    小徐andorid閱讀 2,081評論 0 13
  • 我對愛的感悟 2008-11-30 10:16 愛是什么? 在這個世界上有許多種愛,每個人都會經(jīng)歷不同的愛,母愛,...
    幽蘭在空谷閱讀 1,128評論 0 3
  • 有時候看新聞,會有這樣的事:一個中國人到外國去,發(fā)生了不幸的事。 像前一段時間的美聯(lián)航趕乘客下機(jī),我當(dāng)時第一個反應(yīng)...
    長歌霧后閱讀 470評論 4 3

友情鏈接更多精彩內(nèi)容