07-集合 Set

学习资源:慕课网liyubobobo老师的《玩儿转数据结构》


1、集合Set简介

Set是没有重复元素的对象集合,所有的元素都是唯一的。

2、Set的接口

public interface Set<T> {

    void add(T t);
    void remove(T t);
    boolean ifContains(T t);
    int getSize();
    boolean isEmpty();
}

3、集合的实现

3.1、基于二分搜索树

基于已经实现的二分搜索树,直接复用方法实现Set的接口即可;集合中的元素有序。

package set;

import binarySearchTree.BST;

//基于二分搜索树的集合
public class BSTSet<T extends Comparable<T>> implements Set<T> {

    private BST<T> bst;

    public BSTSet() {
        bst = new BST<>();
    }

    @Override
    public void add(T t) {
        bst.add(t);
    }

    @Override
    public void remove(T t) {
        bst.remove(t);
    }

    @Override
    public boolean ifContains(T t) {
        return bst.contains(t);
    }

    @Override
    public int getSize() {
        return bst.getSize();
    }

    @Override
    public boolean isEmpty() {
        return bst.isEmpty();
    }
}

3.2、基于链表

同上,集合中的元素无序。

package set;

import linkedList.LinkedList;

public class LinkedListSet<E> implements Set<E>  {

    private LinkedList<E> list;


    @Override
    public void add(E e) {

        if(!list.contains(e)){
            list.add2Head(e);
        }
    }

    @Override
    public void remove(E e) {
        list.removeElement(e);
    }

    @Override
    public boolean contains(E e) {
        return list.contains(e);
    }

    @Override
    public int getSize() {
        return list.getSize();
    }

    @Override
    public boolean isEmpty() {
        return list.isEmpty();
    }
}

4、测试

这里,测试集合的不重复性质。统计文本的词汇量。

public void test_1() {
    
    System.out.println("傲慢与偏见");
    ArrayList<String> list = new ArrayList<>();
    if(FileOperation.readFile("pride-and-prejudice.txt", list)){
        System.out.println("单词数:"+list.size());
        BSTSet<String> bstSet = new BSTSet<>();
        for (String word : list) {
            bstSet.add(word);
        }
        System.out.println("词汇量:"+bstSet.getSize());
    }
}

----------------------------------------------------------------------------------

public void test_2(){
    
    System.out.println("傲慢与偏见");
	ArrayList<String> list_2 = new ArrayList<>();
	if(FileOperation.readFile("pride-and-prejudice.txt", list_2)){
        System.out.println("单词数:"+list_2.size());
        LinkedListSet<String> listSet = new LinkedListSet<>();
        for (String word : list_2) {
            listSet.add(word);
        }                    
        System.out.println("词汇量:"+listSet.getSize());
	}
}

FileOperation和傲慢与偏见的下载地址,提取码:g2b5

5、Java中的Set

TreeSet

底层基于红黑树实现

public class TreeSet<E> extends AbstractSet<E>
    implements NavigableSet<E>, Cloneable, java.io.Serializable
{
}

API接口

image-20200611223946233

HashSet

底层基于哈希表实现

public class HashSet<E>
    extends AbstractSet<E>
    implements Set<E>, Cloneable, java.io.Serializable
{
    
}

API接口

image-20200612164029678
posted @ 2020-06-12 16:51  卡文迪雨  阅读(135)  评论(0编辑  收藏  举报