黑马程序员--集合总结(二)

 

 

----------------------- android培训java培训、java学习型技术博客、期待与您交流! ----------------------

(二)Set
  (1)Set初印象
   1)什么是Set
    Set是一个接口,是一个不包含重复元素的 collection。
    更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。
   2)Set有什么特点
    Set集合不允许有重复元素,无存储顺序
    Set集合通过存入对象的equals方法来保证集合中没有重复元素
   3)如何使用Set
    根据不同需求,创建Set接口的实现类对象来存储、操作元素。
    在取出元素的时候,可以通过以下两种方法迭代集合:
    a.使用迭代器
     b.增强for循环
   4)什么时候使用Set
    当要存储的元素不需要有重复的时候使用。
   5)Set的分类
    List主要分为三大类:HashSet,TreeSet和LinkedHashSet
    分类标准:实现原理不同,效率不同
    各自特点
     a,HashSet:去重复, 速度快
     b,TreeSet:去重复, 排序
     c,LinkedHashSet:去重复, 保留存储顺序
  (2)HashSet初印象
   1)什么是HashSet
    HashSet是 Set接口接口的实现类,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;
    特别是它不保证该顺序恒久不变。此类允许使用 null 元素。
   2)HashSet有什么特点
    去重复, 速度快
    底层使用哈希算法保证没有重复元素
    存储对象时,先调用对象的hashCode()方法计算一个哈希值,在集合中查找是否有哈希值相同的对象。
    如果没有哈希值相同的对象,直接存入。
    如果有哈希值相同的对象,则和哈希值相同的对象进行equals()方法比较。
    equals()方法比较结果相同则不存,不同就存入。
    往HashSet集合里存储的对象需要正确重写hashCode和equals方法
    HashSet存储元素效率非常高
   3)如何使用HashSet
    创建HashSet对象,操作元素,如果存入的是对象,并且去重复,那要正确重写对象类的hashCode和equals方法
    在取出元素的时候,可以通过Set的两种方法迭代集合.
   4)什么时候使用HashSet
    只要求去重复,不需要排序且对存储顺序无要求。
  (3)TreeSet初印象
   1)什么是TreeSet
    TreeSet是Set接口的实现类,使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,
    具体取决于使用的构造方法。
   2)TreeSet有什么特点
    去重复, 排序
     在向TreeSet中存储元素的时候, TreeSet会使用指定的比较算法对存储元素进行排序, 内部以二叉树形式进行存储.
     指定比较算法的方式:
      自然顺序: 在类上实现Comparable接口, 重写compareTo方法, 在方法中定义比较算法.
      比较器顺序: 定义类实现Comparator接口, 重写compare方法, 创建比较器对象, 传入TreeSet构造函数.
     如果我们想在TreeSet中存储自定义对象, 并且排序,
     要么这个自定义的类实现Comparable接口, 要么在TreeSet中传入Comparator.
   3)如何使用TreeSet
    创建TreeSet对象,操作元素,如果是非基本类型元素,需要指定比较算法。方式如上。
    在取出元素的时候,可以通过Set的两种方法迭代集合.
   4)什么时候使用TreeSet
    需要去重复且需要排序的时候。
  (4)LinkedHashSet初印象
   1)什么是LinkedHashSet
    LinkedHashSet是HashSet的子类,是具有可预知迭代顺序的 Set接口的哈希表和链接列表实现类。
    此实现与 HashSet 的不同之外在于,后者维护着一个运行于所有条目的双重链接列表。
    此链接列表定义了迭代顺序,即按照将元素插入到 set 中的顺序(插入顺序)进行迭代。
    注意,插入顺序不 受在 set 中重新插入的 元素的影响。(如果在 s.contains(e)
    返回 true 后立即调用 s.add(e),则元素 e 会被重新插入到 set s 中。)
   2)LinkedHashSet有什么特点
     是HashSet的子类, 同样使用哈希算法进行去重复,同时使用链表结构,可以保留存储顺序。
   3)如何使用LinkedHashSet
    创建HashSet对象,操作元素,如果存入的是对象,并且去重复,那要正确重写对象类的hashCode和equals方法
    在取出元素的时候,可以通过Set的两种方法迭代集合.
   4)什么时候使用LinkedHashSet
    需要去重复且需要保留存储顺序的时候。

               -----------------------------------------------未完待续-----------------------------------------------------------

 

----------------------- android培训java培训、java学习型技术博客、期待与您交流! ----------------------

详情请查看:http://edu.csdn.net/heima

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值