Java学习历程-容器SET

Set容器

Set就是我们数学中的集合,其是无续(与你插入元素顺序不一致)且不能够重复的

Set容器的分类

  • HashSet:底层由哈希表+红黑树实现,无续(与你插入元素顺序不一致),利用HashSet可以快速查找,效率很高
  • LinkedHashSet继承HashSet,其底层是哈希表+双向链表,可以实现迭代有序,但其查找效率相对于HashSet,没有其高
  • TreeSet:底层由红黑树实现,可以实现按照元素的大小写进行排序

之间的继承关系如下:

4751345ACB46378BE318A3004A3F7099.png

HashSet

HashSet底层就是HashMap的KEY部分,其可以允许为null,非同步(线程不安全)
其大部分的方法都与容器的方法差不多,对于HashSet,我们经常要判定一个元素是否在这个集合之中,我们经常使用pets.contains(),其返回一个bool值,contains不仅可以判断一个元素是否在集合之中,还可以判断一个集合是否在另一个集合之中pets.containsAll()

package collection;
import java.util.*;
public class HashSetlearning {

  public static void main(String[] args) {
      // TODO Auto-generated method stub
      HashSet a=new HashSet();
      Collections.addAll(a, "A b C D E F C ".split(" "));  //这也是给容器中添加元素的方法
      System.out.print(a);   //会只包含一个C
      System.out.print(a.contains("A"));
      HashSet b=new HashSet();
      Collections.addAll(b, "C D E".split(" "));
      System.out.print(a.containsAll(b));    //使用containsAll()

}
}

LinkedHashSet

其维护了一个双向链表,迭代有序,允许为null
LinkedHashSet具有可预知的迭代顺序,根据链表中元素按插入顺序的链表

package collection;
import java.util.*;
public class LinkedHashSetlearning {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
         LinkedHashSet a=new LinkedHashSet();
            Collections.addAll(a, "A b C D E F C ".split(" "));  //这也是给容器中添加元素的方法
            System.out.print(a);  
            a.add("V");
            a.add("G");
            System.out.print(a);   //会只包含一个C
                
    }

}

[A, b, C, D, E, F][A, b, C, D, E, F, V, G]

TreeSet

  • 可以实现排序功能
  • 底层实际上是一个TreeMap实例,红黑树
  • 非同步
  • 可以实现有序(按照插入的顺序)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。