zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    EBS OAF中如何在多行表中实现附件功能
    ubuntu12.04常见错误总结
    java InputStream使用
    免费送光盘了
    【原创】JAVA8之妙用Optional解决NPE问题
    【原创】分布式之redis复习精讲
    【原创】分布式之数据库和缓存双写一致性方案解析
    【原创】分布式之消息队列复习精讲
    【原创】分布式之延时任务方案解析
    【原创】自己动手循序渐进实现观察者模式
  • 原文地址:https://www.cnblogs.com/sout-ch233/p/13100448.html
Copyright © 2011-2022 走看看