您的位置:首页 > 职场人生

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

2012-05-24 21:35 239 查看
 
 
-----------------------
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息