当前位置 博文首页 > 山间漫步人生路的博客:Collection/Map集合总结

    山间漫步人生路的博客:Collection/Map集合总结

    作者:[db:作者] 时间:2021-07-15 15:33

    Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。

    Map中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。

    Collection中的集合称为单列集合,Map中的集合称为双列集合。

    需要注意的是,Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。

    Map中常用的集合为HashMap集合、LinkedHashMap集合。

    Collection
    |–List 有序,可重复
    |–ArrayList
    底层数据结构是数组,查询快,增删慢。
    线程不安全,效率高
    |–Vector
    底层数据结构是数组,查询快,增删慢。
    线程安全,效率低
    |–LinkedList
    底层数据结构是链表,查询慢,增删快。
    线程不安全,效率高
    |–Set 无序,唯一
    |–HashSet
    底层数据结构是哈希表。
    如何保证元素唯一性的呢?
    依赖两个方法:hashCode()和equals()
    |–LinkedHashSet
    底层数据结构是链表和哈希表
    由链表保证元素有序
    由哈希表保证元素唯一
    |–TreeSet
    底层数据结构是红黑树。
    如何保证元素排序的呢?
    自然排序
    比较器排序
    如何保证元素唯一性的呢?
    根据比较的返回值是否是0来决定

    针对Collection集合我们到底使用谁呢?(掌握)
    唯一吗?
    是:Set
    排序吗?
    是:TreeSet
    否:HashSet
    如果你知道是Set,但是不知道是哪个Set,就用HashSet。
    否:List
    要安全吗?
    是:Vector
    否:ArrayList或者LinkedList
    查询多:ArrayList
    增删多:LinkedList
    如果你知道是List,但是不知道是哪个List,就用ArrayList。
    如果你知道是Collection集合,但是不知道使用谁,就用ArrayList。
    如果你知道用集合,就用ArrayList。

    在集合中常见的数据结构(掌握)
    ArrayXxx:底层数据结构是数组,查询快,增删慢
    LinkedXxx:底层数据结构是链表,查询慢,增删快
    HashXxx:底层数据结构是哈希表。依赖两个方法:hashCode()和equals()
    TreeXxx:底层数据结构是二叉树。两种方式排序:自然排序和比较器排序

    Map
    Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value;
    Map中的键值对以Entry类型的对象实例形式存在;
    建(key值)不可重复,value值可以重复,一个value值可以和很多key值形成对应关系,每个建最多只能映射到一个值。
    Map支持泛型,形式如:Map<K,V>
    Map中使用put(K key,V value)方法添加
    HashMap
    基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)除实现了Map接口外还实现了Cloneable,Serializable,继承了AbstractMap抽象类
    此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
    特点:
    键无序,唯一,类似于Set集合
    值有序,可重复,类似于List
    底层数据结构是哈希表,保证键唯一
    允许键为null,值为null

    LinkedHashMap
    Map 接口的哈希表和链表实现,具有可预知的迭代顺序
    特点:
    键有序,唯一,
    值有序,可重复,类似于List
    底层数据结构是哈希表和链表,哈希表保证键唯一,链表保证键有序

    TreeMap
    基于红黑树(Red-Black tree)的 NavigableMap 实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,
    具体取决于使用的构造方法。
    特点:
    键可排序,唯一,
    值有序,可重复,类似于List
    底层数据结构是自平衡的二叉树,可排序
    排序方式类似于TreeSet,分为自然排序和比较器排序,具体取决于使用的构造方法
    HashTable
    此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值
    特点:
    不允许null键和null值
    线程安全,效率低
    HashMap和Hashtable的区别:
    HashMap是不安全的不同步的效率高的 允许null键和null值
    Hashtable是安全的同步的效率低的 不允许null键和null值
    底层都是哈希表结构

    cs