A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

虽然认真的看了毕老师的视频,但是对于Set集合与Map集合到底该什么时候用不是很清楚,找高手给具体讲解一下啊。

12 个回复

倒序浏览
 Set的功能方法
  Set具有与Collection完全一样的接口,因此没有任何额外的功能,不像前面有两个不同的List。实际上Set就是Collection,只是行为不同。(这是继承与多态思想的典型应用:表现不同的行为。)Set不保存重复的元素(至于如何判断元素相同则较为负责)
  Set : 存入Set的每个元素都必须是唯一的,因为Set不保存重复元素。加入Set的元素必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。
  HashSet : 为快速查找设计的Set。存入HashSet的对象必须定义hashCode()。
  TreeSet : 保存次序的Set, 底层为树结构。使用它可以从Set中提取有序的序列。
  LinkedHashSet : 具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。


  Map的功能方法
  方法put(Object key, Object value)添加一个“值”(想要得东西)和与“值”相关联的“键”(key)(使用它来查找)。方法get(Object key)返回与给定“键”相关联的“值”。可以用containsKey()和containsValue()测试Map中是否包含某个“键”或“值”。标准的Java类库中包含了几种不同的Map:HashMap, TreeMap, LinkedHashMap, WeakHashMap, IdentityHashMap。它们都有同样的基本接口Map,但是行为、效率、排序策略、保存对象的生命周期和判定“键”等价的策略等各不相同。
  执行效率是Map的一个大问题。看看get()要做哪些事,就会明白为什么在ArrayList中搜索“键”是相当慢的。而这正是HashMap提高速度的地方。HashMap使用了特殊的值,称为“散列码”(hash code),来取代对键的缓慢搜索。“散列码”是“相对唯一”用以代表对象的int值,它是通过将该对象的某些信息进行转换而生成的。所有Java对象都能产生散列码,因为hashCode()是定义在基类Object中的方法。
  HashMap就是使用对象的hashCode()进行快速查询的。此方法能够显著提高性能。
  Map : 维护“键值对”的关联性,使你可以通过“键”查找“值”
  HashMap : Map基于散列表的实现。插入和查询“键值对”的开销是固定的。可以通过构造器设置容量capacity和负载因子load factor,以调整容器的性能。
  LinkedHashMap : 类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一点。而在迭代访问时发而更快,因为它使用链表维护内部次序。
  TreeMap : 基于红黑树数据结构的实现。查看“键”或“键值对”时,它们会被排序(次序由Comparabel或Comparator决定)。TreeMap的特点在于,你得到的结果是经过排序的。TreeMap是唯一的带有subMap()方法的Map,它可以返回一个子树。
  WeakHashMao : 弱键(weak key)Map,Map中使用的对象也被允许释放: 这是为解决特殊问题设计的。如果没有map之外的引用指向某个“键”,则此“键”可以被垃圾收集器回收。
  IdentifyHashMap : 使用==代替equals()对“键”作比较的hash map。专为解决特殊问题而设计。

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
我靠   连这个基本的 常识都不清楚 ,还说 看了毕老师的视频。。。无语了
回复 使用道具 举报
翟友伟 发表于 2012-4-7 17:28
我靠   连这个基本的 常识都不清楚 ,还说 看了毕老师的视频。。。无语了
...

呃~~慧根比较浅,见谅啊
回复 使用道具 举报
最基本的  就是 map里头 存放的 是键值对 的元素    <Key,Value>   
Set是无序,元素唯一, 有HashSet,TreeSet
Map 有 HashMap,TreeMap
回复 使用道具 举报
set集合其实底层也是map集合。。。set中的元素不允许重复。。其实就是map中的key不允许重复一样。。比如我们想统计一个我们随机生成的数组,,其中数字出现的次数。。就 可以用。。我们用key来记录出现的数。。通过value来记录出现的数的次数。。。如果这个数已经存在了就不同添加这个数。。。没出现一个就加1.。。
回复 使用道具 举报
你所操作的  元素  需要建立  对于映射关系的 时候用 map集合
具体应用可以看  毕向东的    那个 把"asdasdasdasdsas"字符串  按各个字母出现次数输出的例子。。
回复 使用道具 举报
一般网页中  , map用的也比较多
按照对于的键 取出对应的值  进行操作
具体实际开发中的例子 咱们现在这水平阶段还没机会接触到 。
回复 使用道具 举报
map集合,对象以键值对的形式存放在集合中,并且键是不允许重复的。常用的实现是HashMap和TreeMap,HashMap能够快速的查询到一个键,而TreeMap则是对键按序存放的。
set接口同样是对collection的扩充,它不允许存放相同的元素。常用类HashSet和TreeSet.HashSet主要能够快速定位到一个元素,需要用到HashCode()方法,而TreeSet类中可以实现对元素的排序。
回复 使用道具 举报
Set集合
        1.特点:
        元素是无序(存人和去除的顺序不一定一致),元素不可重复。

        2.子类:
        HashSet:底层数据结构是哈希表,线程是非同步的。
                        HashSet是如何保证元素的唯一性的呢?
                        是通过元素的两个方法,hashCode和equals来完成。
                        如果元素的Hashcode值相同,才会判断equals是否为true。
                        如果元素的hashCode值不同,不会调用equals。
       
                注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode        和equals方法。       
               
        TreeSet:可以对Set集合中的元素进行排序
                        底层数据结构式二叉树。
                        保证元素唯一性的依据:
                        compareTo方法return
       
                        TreetSet排序的第一种方式:让元素自身具备比较性,
                        元素需要实现Comparable接口,覆盖compareTo方法。
                        这种方式也成为元素的自然顺序,或者叫做默认顺序。
       
                        TreetSet排序的第二种方式:
                        当元素自身不具备比较性时,或者具备的比较性不是所需要的。
                        这时需要让集合自身具备比较性。
                        在集合初始化时,就有了比较方式。

Map集合
1.特点:
       
        该集合存储键值对。一对一对往里存。而且要保证键的唯一性。

2.子类:
       
        HashMap:基于哈希表的 Map 接口的实现,此实现提供所有可选的映射操作,并允许使用 null 值和 null 键
                    
             遍历:
                  先调用keySet()得到key的set集合,
                  再迭代遍历key的set集合,
                 根据key得到value。
                                       
        Hashtable:同HashMap,一般不使用
                       
        HashMap与Hashtable的区别:
                        HashMap:底层是哈希表数据结构,允许使用null值和null键,该集合是同步的。效率高
                        Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1 赞一个!

查看全部评分

回复 使用道具 举报
Map:
    |--Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的,JDK1.0,效率低。
    |--HashMap:底层是哈希表数据结构,允许存入null键null值。线程不同步的,JDK1.2,效率高。
    |--TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。
和Set很像,Set底层就是使用了Map集合,它其中的大部分方法都是Map的。
重点的两个方法:entrySet和KeySet
回复 使用道具 举报
基本搞明白了,谢谢大家啊
回复 使用道具 举报
pray 高级黑马 2014-4-26 04:19:25
13#
看了楼主的帖子,我面色凝重 ,关掉电脑,起身打开冰箱,拿出一瓶农妇山泉,拿在手里走到窗前,凝 视着远方,外面灰蒙蒙的天空下着小 雨,看着窗外,我的心情更忧郁了, 我再也无法抑制内心的情感,打开窗 子,对着窗外大声呐喊道:楼主,你 写的这是神马几把玩意?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马