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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

刚学习完了集合类,collection与Map之间是什么关系?为什么毕老师所展示的图片上写的是Map---produces--->collection,另外set中的hashSet与treeSet,Map中的hashMap和treeMap都什么时候用啊?区别到底是什么,最好能说的仔细点,比如说哪个可以排序,如何排?比较器中需要重写那些方法,这些我都搞混了,求高手帮忙。

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

4 个回复

正序浏览
http://bbs.itheima.com/forum.php ... amp;extra=#pid50554
  这是我总结的  前段时间发的帖子  你看看吧
回复 使用道具 举报
Collection 和 Map 的区别
容器内每个为之所存储的元素个数不同。
Collection类型者,每个位置只有一个元素。
Map类型者,持有 key-value pair,像个小型数据库。

Collection
     --List:将以特定次序存储元素。所以取出来的顺序可能和放入顺序不同。
           --ArrayList / LinkedList / Vector
     --Set : 不能含有重复的元素
           --HashSet / TreeSet
Map
     --HashMap
    --HashTable
    --TreeMap

Collection、List、Set、Map都是接口,不能实例化。
继承自它们的 ArrayList, Vector, HashTable, HashMap是具象class,这些才可被实例化。

Collections
Collections是针对集合类的一个帮助类。提供了一系列静态方法实现对各种集合的搜索、排序、线程完全化等操作。
相当于对Array进行类似操作的类——Arrays。
如,Collections.max(Collection coll); 取coll中最大的元素。
   Collections.sort(List list); 对list中元素排序
在各种Sets中,HashSet通常优于HashTree(插入、查找)。只有当需要产生一个经过排序的序列,才用TreeSet。
HashTree存在的唯一理由:能够维护其内元素的排序状态。
在各种Maps中
HashMap用于快速查找。
当元素个数固定,用Array,因为Array效率是最高的。

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
Set接口    Set集合无序、不可重复

      实现类:

      HashSet:底层数据结构哈希表

      TreeSet:底层数据结构二叉树,可以对集合进行排序

       当我们需要对TreeSet集合中的元素不具备比较功能,或是比较功能不适合时,需要让集   合自身有比较性。这时就需要自定义一个比较器。
       解决方案:
        1)集合元素自身具备比较性,集合元素类实现Comparable接口,compareTo方法,提供自然排序方法
        2)集合具备比较性。比较器,实现Comparator接口,compare方法。
        当有比较器的时候,以比较器为主

        记忆:Comparable接口的obj1.compareTo(obj2)和元素比较,自然排序用
              Comparator接口的compare(obj1,obj2)比较器,顾名思义要传两个对象


      如何确定元素的唯一性?
       HashSet依赖的是元素的hashCode()和equals()方法,:
         1)首先判断元素哈希值
         2)哈希值不同,不需要再判断元素的equals()方法,返回false
         3)哈希值相同,判断equals()方法。如果equals()方法相同返回true,视为同一个元素;不同返回false,视为不同的元素,会存储在同一个哈希值上
         4)所以我们要重写hashCode()和equals()方法,hashCode()用来判断集合元素对象,而equals()用来判断元素对象的属性值是否相同
       TreeSet根据比较方法返回值,负数,放左边,整数放右边,零就代表重复   



双序列集合Map

     1)一次存一对元素,以键值对的形式<k,v>
     2)Map集合中的键必须确定唯一性

     取出集合元素两种方法:
     1)通过keySet()取出集合所有的键,对应Set集合,遍历Set集合取出key对应的value
     2)通过entrySet()取出键值映射的关系,对应Set集合,遍历Set集合,取得键和值
        这种取法,可以把一组键值看成是一个封装的对象^_^(个人理解)

     Hashtable:底层哈希表,同步,线程安全,不允许null作为键
         Properties,多用于配置文件的定义和操作,键值之间通过=,都是字符串

     HashMap:底层哈希表,不同步,线程不安全,运行null作为键,null作为值
         LinkedHashMap:有序,存入和取出的顺序一致

     TreeMap:可以对集合的键进行排序

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
这是容器类的继承关系,您仔细看看

w.JPG (34.3 KB, 下载次数: 28)

w.JPG

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

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