黑马程序员--集合总结(二)
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
相关文章推荐
- 黑马程序员---一DAY16总结--java中你必须掌握的集合框架技术
- 黑马程序员_Java第16天知识总结_Map集合_entrySet_keySet
- 黑马程序员_集合总结
- 黑马程序员———Java基础------集合框架知识点总结(二)
- 黑马程序员——学习日记之--集合框架知识总结
- 黑马程序员 总结(一)——集合类的总结
- 黑马程序员----java基础---集合总结
- 黑马程序员------集合总结*
- 黑马程序员---Java基础总结--集合
- 黑马程序员--07.集合框架--08.【TreeSet的Comparator排序】【TreeSet总结】
- 黑马程序员——集合框架总结
- 黑马程序员---集合总结
- 黑马程序员——Java学习笔记之11——“Collection集合”总结
- 黑马程序员_java 集合框架学习总结
- 黑马程序员-集合类总结-No.03
- 黑马程序员——关于Set,List,Map集合的简单总结
- 黑马程序员——Map集合总结
- 黑马程序员————Java基础日常笔记---对集合的理解与总结二
- 黑马程序员_java的集合类(对第十六课Map体系集合的总结)
- 黑马程序员--(Map与集合框架工具类的知识总结)