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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙宇晨 中级黑马   /  2012-5-8 09:56  /  2393 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Collection和Map之间的区别?

8 个回复

倒序浏览
毕老师说的好,collection中存的都是一票单身汉,map集合中存的是夫妻。
回复 使用道具 举报
好大的题目呀,我试着说一下
Collection是对象集合的容器,只是针对单个对象,用毕老师的话说,集中了一大票单身汉,就是对象就对啦!
而Map集合了键值对,里面的是一一对应的对象,一个键对应一个值,键不能重复。
用毕老师不恰当的比喻,一个丈夫对应一个妻子,丈夫不能重复!(妻子可以重复){:soso_e127:}
回复 使用道具 举报
Map 散列表: 也是个接口。是以键值对方式实现的集合, Map 描述了:(key:value) 成对放置的集合, key不重复, Value可以重复. key重复算一个. Map适合检查查找.
       主要实现:  HashMap(散列表算法实现)/ Hashtable
                        A HashMap 新, 非线程安全, 不检查锁, 快
              B Hashtable 旧 (1.2以前) 线程安全, 检查锁, 慢一点
Collection是个集合超级接口,其中List,set都是Collection的子接口。
回复 使用道具 举报
你这个题目真的好大啊
1)  Collection 。 一组对立的元素,通常这些元素都服从某种规则。List必须保持元素特定的顺序,而Set 不能有重复元素。
        2)  Map 。 一组 成对的“键值对”对象。初看起来这似乎应该是一个Collection ,其元素是成对的对象,但是这样的设计实现起来太笨拙了,于是我们将Map明确的提取出来形成一个独立的概念。另一方面,如果使用Collection 表示Map的部分内容,会便于查看此部分内容。因此Map一样容易扩展成多维Map ,无需增加新的概念,只要让Map中的键值对的每个“值”也是一个Map即可。
        Collection和Map的区别在于容器中每个位置保存的元素个数。Collection 每个位置只能保存一个元素(对象)。此类容器包括:List ,它以特定的顺序保存一组元素;Set 则是元素不能重复。
        Map保存的是“键值对”,就像一个小型数据库。我们可以通过“键”找到该键对应的“值”。
             Collection – 对象之间没有指定的顺序,允许重复元素。
             Set –  对象之间没有指定的顺序,不允许重复元素
             List–  对象之间有指定的顺序,允许重复元素,并引入位置下标。
             Map –  接口用于保存关键字(Key)和数值(Value)的集合,集合中的每个对象加入时都提供数值和关键字。Map 接口既不继承 Set 也不继承 Collection。
        List、Set、Map共同的实现基础是Object数组
回复 使用道具 举报
他们都是接口,都提供了对集合对象进行基本操作的方法,如楼上所说的毕老师的经典例子,“collection中存的都是一票单身汉,map集合中存的是夫妻”,可以理解为collection中存储的是不相关的元素,(实质上,在元素重复上collection的set中元素还是有影响的),map中存储的是键值对。collection中包含list和set,List按对象进入的顺序保存对象,不做排序或编辑操作。Set对每个对象只接受一次,并使用自己内部的排序方法(通常,你只关心某个元素是否属于Set,而不关心它的顺序--否则应该使用List)。Map同样对每个元素保存一份,但这是基于"键"的,Map也有内置的排序,因而不关心元素添加的顺序。如果添加元素的顺序对你很重要,应该使用 LinkedHashSet或者LinkedHashMap.

回复 使用道具 举报
Collection和Map的主要区别在于存储的内容和取数据的方式
1. Collection中存放的是引用类型的数据,
   而Map中存放的是成对存方的是成对的引用数据,
   这种成对的数据类型通过某种映射关系形成关联关系
2.由于二者存储的数据不一样,也就决定了他们的取数据的方式的不同
   Collection有自己的迭代器,通过迭代器来取数据,而Map没有自己的
   迭代器,所以要将其首先转成Set集合在对其进行元素取出。Map一般
   通过KeySet将键或Entry方法将映射关系来转成Set集合,再通过相应
   的方法取出Map中
    的相应键值对
回复 使用道具 举报
Collection接口,包含list和set子接口
Collection和Map接口之间的主要区别在于:Collection中存储了一组对象,而Map存储关键字/值对。
在Map对象中,每一个关键字最多有一个关联的值。
Map:不能包括两个相同的键,一个键最多能绑定一个值。null可以作为键,这样的键只有一个;可以有一个或多个键所对应的
值为null。当get()方法返回null值时,即可以表示Map中没有该键,也可以表示该键所对应的值为null。因此,在Map中不能由get()方法来判断Map中是否存在某个键,而应该用containsKey()方法来判断。
继承Map的类有:HashMap,HashTable
回复 使用道具 举报
本帖最后由 隋营营 于 2012-5-8 10:58 编辑

最主要的区别有:
  • Collection 与 Map 是两个不同的接口(看图),有不同的实现类。
  • 存储的元素对象方式不同:
       Collection存储单个元素对象
       Map存储一对元素对象(key-value)
  3.  遍历输出方式不同:
       以Collection的实现类ArraList为例:

       ArrayList asl = new ArrayList();  

       ......
       for(Iterator itr= asl.iterator(); itr.hasNext();)  

       {    System.out.println(itr.next());     }

       以Map的实现类HashMap为例:
       Map<Integer, String> sm = new HashMap<Integer, String>();
       ......
       Set<Integer> ss = sm.keySet();  //Map容器中没有定义iterator()方法
       for (Iterator<Integer> sir = ss.iterator(); sir.hasNext();) {
            System.out.println(sm.get(sir.next()));

       }






2012-05-08_104351.png (14.87 KB, 下载次数: 24)

Collection and Map

Collection and Map
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马