Java中Collection和Map集合总结

来源:互联网 发布:首席数据官实战 编辑:程序博客网 时间:2024/05/02 05:01

Collection(单列集合)

        List(有序,可重复)

               ArrayList
                        底层数据结构是数组,查询快,增删慢
                       线程不安全,效率高
                Vector
                       底层数据结构是数组,查询快,增删慢
                       线程安全,效率低
                LinkedList
                        底层数据结构是链表,查询慢,增删快
                        线程不安全,效率高

        Set(无序,唯一)

                HashSet

                        底层数据结构是哈希表。
                        哈希表依赖两个方法:hashCode()和equals()
                        执行顺序:
                                首先判断hashCode()值是否相同
                                        是:继续执行equals(),看其返回值
                                                是true:说明元素重复,不添加
                                                是false:就直接添加到集合
                                        否:就直接添加到集合
                        最终:
                                自动生成hashCode()和equals()即可

                LinkedHashSet
                        底层数据结构由链表和哈希表组成。
                        由链表保证元素有序。
                        由哈希表保证元素唯一。
                TreeSet
                        底层数据结构是红黑树。(是一种自平衡的二叉树)
                        如何保证元素唯一性呢?
                                根据比较的返回值是否是0来决定
                        如何保证元素的排序呢?
                                两种方式
                                        自然排序(元素具备比较性)
                                                让元素所属的类实现Comparable接口
                                        比较器排序(集合具备比较性)
                                                让集合接收一个Comparator的实现类对象

Map(双列集合)

                A:Map集合的数据结构仅仅针对键有效,与值无关。
                B:存储的是键值对形式的元素,键唯一,值可重复。

                HashMap
                        底层数据结构是哈希表。
                        哈希表依赖两个方法:hashCode()和equals()
                        执行顺序:
                                首先判断hashCode()值是否相同
                                        是:继续执行equals(),看其返回值
                                                是true:说明元素重复,不添加
                                                是false:就直接添加到集合
                                        否:就直接添加到集合
                        最终:
                                自动生成hashCode()和equals()即可

                LinkedHashMap
                        底层数据结构由链表和哈希表组成。
                        由链表保证元素有序。
                        由哈希表保证元素唯一。
                Hashtable
                        底层数据结构是哈希表。
                        哈希表依赖两个方法:hashCode()和equals()
                        执行顺序:
                                首先判断hashCode()值是否相同
                                        是:继续执行equals(),看其返回值
                                                是true:说明元素重复,不添加
                                                是false:就直接添加到集合
                                        否:就直接添加到集合
                        最终:
                                自动生成hashCode()和equals()即可

                TreeMap
                        底层数据结构是红黑树。(是一种自平衡的二叉树)
                        如何保证元素唯一性呢?
                                根据比较的返回值是否是0来决定
                        如何保证元素的排序呢?
                                两种方式
                                        自然排序(元素具备比较性)
                                                让元素所属的类实现Comparable接口
                                        比较器排序(集合具备比较性)

                                                让集合接收一个Comparator的实现类对象

        HashMap和Hashtable的区别:

                1、HashMap不是线程安全的(效率高),Hashtable是线程安全的(效率低);

                2、HashMap允许空(null)键和空(null)值,Hashtable不允许;

                最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 

在集合中常见的数据结构

        ArrayXxx:底层数据结构是数组,查询快,增删慢
        LinkedXxx:底层数据结构是链表,查询慢,增删快
        HashXxx:底层数据结构是哈希表。依赖两个方法:hashCode()和equals()

        TreeXxx:底层数据结构是二叉树。两种方式排序:自然排序和比较器排序

根据需求决定使用哪种集合


        是否是键值对象形式:

                是:Map

                         键是否需要排序:

                                是:TreeMap
                                否:HashMap
                        不知道,就使用HashMap。

                否:Collection
                        元素是否唯一:
                                是:Set
                                        元素是否需要排序:
                                                是:TreeSet
                                                否:HashSet
                                不知道,就使用HashSet

                                否:List
                                        要安全吗:
                                                是:Vector
                                                否:ArrayList或者LinkedList
                                                        增删多:LinkedList
                                                        查询多:ArrayList
                                                不知道,就使用ArrayList
                                不知道,就使用ArrayList

0 0
原创粉丝点击