学习资源:慕课网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接口
HashSet
底层基于哈希表实现
public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, java.io.Serializable
{
}
API接口