zoukankan      html  css  js  c++  java
  • 数组和集合(三):Set集合的使用总结

    一、概述

    • · 继承collection接口
    • · 无序(不记录添加顺序)、不允许元素重复、只允许存在一个null元素

    二、实现类

    1. HashSet

    • · 底层其实是包装了一个HashMap实现的
    • · 采用HashCode算法来存取集合中的元素,具有比较好的读取和查找性能
    • · 通过equals和HashCode来判断两个元素是否相等
    • · 非线程安全

    2. LinkedHashSet

    • · 继承HashSet,本质是LinkedHashMap实现
    • · 有序的,根据HashCode的值来决定元素的存储位置,同时使用一个链表来维护元素的插入顺序
    • · 非线程安全

    3. TreeSet

    • · 是一种排序的Set集合,实现了SortedSet接口,底层是用TreeMap实现的,本质上是一个红黑树原理
    • · 相对HashSet来说,TreeSet提供了一些额外的按排序位置访问元素的方法,例如first(), last(), lower(), higher(), subSet(), headSet(), tailSet().
    • · 排序分两种:自然排序(存储元素实现Comparable接口)和定制排序(创建TreeSet时,传递一个自己实现的Comparator对象)

    4. EnumSet

    • · 集合元素必须是枚举类型,否则会抛出异常
    • · EnumSet集合也是有序的,其顺序就是Enum类内元素定义的顺序
    • · EnumSet存取的速度非常快,批量操作的速度也很快

     

    三、遍历Set的两种方法

    1. iterator迭代遍历:

     

    Set<String> set = new HashSet<String>();
    
    Iterator<String> it = set.iterator();
    
    while (it.hasNext()) {
    
      String str = it.next();
    
      System.out.println(str);
    
    }

    2. foreach循环遍历:

    for (String str : set) {
    
          System.out.println(str);
    
    }

     

  • 相关阅读:
    UVa 10118 记忆化搜索 Free Candies
    CodeForces 568B DP Symmetric and Transitive
    UVa 11695 树的直径 Flight Planning
    UVa 10934 DP Dropping water balloons
    CodeForces 543D 树形DP Road Improvement
    CodeForces 570E DP Pig and Palindromes
    HDU 5396 区间DP 数学 Expression
    HDU 5402 模拟 构造 Travelling Salesman Problem
    HDU 5399 数学 Too Simple
    CodeForces 567F DP Mausoleum
  • 原文地址:https://www.cnblogs.com/wslook/p/9385629.html
Copyright © 2011-2022 走看看