• Java集合Set、Map、HashSet、HashMap、TreeSet、TreeMap等


    1、Set和Map的关系:

    Set代表一种集合元素无序、不可重复的集合,Map代表一种由多个key-value对组成的集合。

    Set的集合继承体系:

    Map关系集合

    Map集合的key特征:所有key不能重复,key之间没有顺序。Map集合的所有key将具有set集合的特征。

    对Set做改造可将Set改造成Map集合;

    2、HashSet和HashMap的区别和联系:
        对于HashSet,系统采用Hash算法决定集合元素的存储位置;对于HashMap,系统将value当成key的附属物,系统根据hash算法决定key的存储位置,value总是紧随key存储。

        HashSet通过封装一个HashMap对象来存储所有的集合元素,所有放入HashSet中的集合元素实际上由HashMap的key来保存,而HashMap的value则存储了一个PERSENT,它是一个静态的Object对象。

        HashSet的add()方法添加元素时实际上转变为调用HashMap的put()方法来添加key-value对,当新放入的hashmap的Entry中的key与集合中原有的Entry的key相同(hashCode()返回值相等,通过equals比较也返回true)时,新添加的Entry的value将覆盖原来Entry的value,但key不会有任何改变。如果向hashSet中添加一个已经存在的元素,新添加的集合元素不会覆盖已有的集合元素。

    3、TreeMap和TreeSet的区别和联系:

        TreeSet底层采用一个NavigableMap来保存TreeSet集合的元素,NavigableMap是一个接口,底层使用TreeMap来保存Set集合中的所有元素。TreeSet里绝大部分方法都是直接调用TreeMap方法来实现。

        TreeMap采用一种被称为“红黑权”的排序二叉树来保存Map中的每个Entry——每个Entry都被当成红黑树的一个节点来对待。向TreeMap添加元素时,系统都要将该Entrty当成一个新节点,保证TreeMap中所有key总是由小到大排列的。TreeMap添加元素、取出元素的性能都比HashMap低。

    4、Map和List

        Map集合是一个关联数组,包含两组值,key组成的集合可以组成一个set集合,value组成的集合可以组成List集合。

    Map接口提供get(K key)方法,允许Map对象根据key来获取value; 

    List接口提供get(int index)方法,允许List对象根据元素索引来取得value;

    List相当于所有key都是int型的Map,也可以说Map相当于索引是任意类型的List;

    5、ArrayList和LinkedList

        List集合的实现类有三个:ArrayList、Vector和LinkedList。Vector还有一个Stack子类,Stack在Vector父类的基础上增加了五个方法。Stack是一个线程安全的类,Vector也是一个线程安全的类。

        从序列化机制角度看,ArrayList的实现比Vector的实现更安全,Vector是ArrayList的线程安全版本。

    当取元素时ArrayList性能大大优于LinkedList,因为ArrayList底层以数组来保存集合元素。当程序需要添加或删除元素时,ArrayList必须对底层数组元素整体移动,如果添加元素导致集合长度超过底层数组长度,ArrayList必须创建一个长度为原来1.5倍的数组,再由垃圾回收机制回收原有数组,开销较大。LinkedList,在插入删除元素上,性能高于ArrayList。

    6、迭代器接口Iterator

        用于迭代各种Collection集合,用iterator()方法返回一个Iterator用于遍历该集合中的元素。用remove()方法删除刚迭代的集合元素。

  • 相关阅读:
    暴躁游戏

    时间记录表格
    好好生活
    JAVA环境的配置
    Java简介
    markdown学习

    Arduino
    Arduino
  • 原文地址:https://www.cnblogs.com/yzm10/p/7529295.html
Copyright © 2020-2023  润新知