数组和集合(三):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);

}

 

原文地址:https://www.cnblogs.com/wslook/p/9385629.html