黑马程序员—基础回顾集合体系总结(短篇)

来源:互联网 发布:淘宝联盟禁止自推自买 编辑:程序博客网 时间:2024/06/11 07:16
集合                      

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------

        对于学习中发掘的问题,借鉴了老师视频中的讲解和演示资料,进行了部分归纳总结。

有利于在后面的学习中进行回顾,抓住重点。

        希望自己和走过路过的朋友们都有些收获吧。


                      |--Collection     是接口
                                            |--List子接口
                                                                  |--ArrayList  子类
                                                                                        底层数据结构是数组,查询快,增删慢
                                                                                        线程不安全,效率高
                                                                  |--Vector
                                                                                        底层数据结构是数组,查询快,增删慢
                                                                                        线程安全,效率低
                                                                  |--LinkedList
                                                                                        底层数据结构是链表,查询慢,增删快
                                                                                        线程不安全,效率高
                                            |--Set
                                                                  |--HashSet
                                                                                        底层数据结构是哈希表。
                                                                                        是如何保证元素的唯一性的?
                                                                                        它依赖于两个方法:hashCode()和equals()
                                                                                                              顺序:
                                                                                                              先判断hashCode(),
                                                                                                              相同:继续equals()
                                                                                                              返回true,不添加
                                                                                                              返回fales,添加到集合
                                                                                                              不同:添加到集合
                                                                  |--LinkedHashSet
                                                                                        有序,唯一
                                                                                        底层数据结构是哈希表和链表。
                                                                                        由链表保证有序,由哈希表保证唯一。
                                                                  |--TreeSet
                                                                                        底层数据结构是二叉树。
                                                                                        是如何保证元素的唯一性的?
                                                                                        根据返回值是否是0判断是否重复。
                                                                                        并且还要保证元素有序:
                                                                                        根据返回值是正数还是负数。
                                                                                        实现方案:
                                                                                        元素具备比较性:Comparable
                                                                                        集合具备比较性:Comparator
                      |--Map(Map的数据结构针对键有效)
                                            |--HashMap
                                                                  HashMap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,
                                                                  具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。HashMap最多只允许一条记录的键为Null;
                                                                  允许多条记录的值为 Null;
                                                                  HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。
                                                                  如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力,
                                                                  或者使用ConcurrentHashMap。

                                            |--Hashtable
                                                                  Hashtable与 HashMap类似,它继承自Dictionary类,不同的是:它不允许记录的键或者值为空;
                                                                  它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了 Hashtable在写入时会比较慢。

                                            |--TreeMap
                                                                  TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,
                                                                  也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。

2:到底该用谁?
                      需求:
                      键值对吗?
                                            是:Map
                                                                  需要对键排序吗?
                                                                                        是:TreeMap
                                                                                        不是:HashMap

                                            注意:不知道使用哪种Map,使用HashMap

                                            不是:Collection
                                                        元素唯一吗?
                                                                  是:Set
                                                                  需要对元素排序吗?
                                                                                        是:TreeSet
                                                                                        不是:HashSet

                                                                                        注意:不知道使用哪种Set,使用HashSet
                                                                  不是:List
                                                                                        查询多:ArrayList
                                                                                        增删多:LinkedList


                                            注意:不知道使用哪种List,使用ArrayList

3:ArrayList,LinkedList,HashSet,HashMap数据的存储和遍历
                                            A:List
                                            添加功能:add()
                                            遍历功能:
                                                                  a:迭代器
                                                                  b:普通for
                                                                  c:增强for

                      注意:
                      如果仅仅是为了遍历,使用a,c都可以。
                      如果在遍历的过程中,需要知道元素的位置,使用b。

                                            B:Set
                                            添加功能:add()
                                            遍历功能:
                                                                  a:迭代器
                                                                  c:增强for

                                            C:Map
                                            添加功能:put()
                                            遍历功能:
                                                                  a:丈夫找妻子keySet()
                                                                  b:结婚证找丈夫和妻子entrySet()
                      注意:建议使用a,好理解。
                                            ----------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
0 0
原创粉丝点击