美文网首页
三大集合:List、Map、Set的区别与联系

三大集合:List、Map、Set的区别与联系

作者: squirrels | 来源:发表于2020-04-08 23:18 被阅读0次
    • List 是可重复集合,Set 是不可重复集合,这两个接口都实现了 Collection 父接口。
    • List 可以插入多个null元素,而Set 只允许插入一个null元素
    • list是一个有序的容器,保持了每个元素的插入顺序。即输出顺序就是输入顺序,而set方法是无序容器,无法保证每个元素的存储顺序,TreeSet通过 Comparator 或者 Comparable 维护了一个排序顺序
    • Map 未继承 Collection,而是独立的接口,Map 是一种把键对象和值对象进行映射的集合,它的每一个元素都包含了一对键对象和值对象,Map 中存储的数据是没有顺序的, 其 key 是不能重复的,它的值是可以有重复的。

    面试可以这样答:List中存储的数据是有顺序的,并且值允许重复;Map中存储的数据是无序的,它的键是不允许重复的,但是值是允许重复的;Set中存储的数据是无顺序的,并且不允许重复,但元素在集合中的位置是由元素的hashcode决定,即位置是固定的(Set集合是根据hashcode来进行数据存储的,所以位置是固定的,但是这个位置不是用户可以控制的,所以对于用户来说set中的元素还是无序的)。

    List 的实现类有 ArrayList,Vector 和 LinkedList:

    ArrayList 和 Vector 内部是线性动态数组结构,在查询效率上会高很多,Vector 是线程安全的,相比 ArrayList 线程不安全的,性能会稍慢一些。
    LinkedList:是双向链表的数据结构存储数据,在做查询时会按照序号索引数据进行前向或后向遍历,查询效率偏低,但插入数据时只需要记录本项的前后项即可,所以插入速度较快。
    面试答题:

    • LinkedList:基于链表实现,链表内存是散列的,增删快,查找慢;
    • ArrayList :基于数组实现,非线程安全,效率高,增删慢,查找快;
    • Vector :基于数组实现,线程安全,效率低,增删慢,查找慢;

    Set 的实现类有 HashSet 和 TreeSet;

    HashSet:内部是由哈希表(实际上是一个 HashMap 实例)支持的。它不保证 set 元素的迭代顺序。不允许集合中有重复的值,使用该方式时需要重写 equals()和 hash Code()方法;
    TreeSet:TreeSet 使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序。

    Map 接口有三个实现类:Hashtable,HashMap,TreeMap,LinkedHashMap;

    Hashtable:内部存储的键值对是无序的是按照哈希算法进行排序,与 HashMap 最大的区别就是线程安全。键或者值不能为 null,为 null 就会抛出空指针异常。
    TreeMap:基于红黑树 (red-black tree) 数据结构实现,按 key 排序,默认的排序方式是升序。
    LinkedHashMap:有序的 Map 集合实现类,相当于一个栈,先 put 进去的最后出来,先进后出。

    • HashMap:基于 hash 表的 Map 接口实现,非线程安全,高效,支持 null 值和 null
      键;
    • HashTable:线程安全,低效,不支持 null 值和 null 键;
    • LinkedHashMap:是 HashMap 的一个子类,保存了记录的插入顺序;
    • SortMap 接口:TreeMap,能够把它保存的记录根据键排序,默认是键值的升序排序

    补充:HashMap 和 HashTable
    HashMap 是线程不安全的,HashMap 是一个接口,是 Map的一个子接口,是将键映射到值得对象,不允许键值重复,允许空键和空值;由于非线程安全, HashMap的效率要较 HashTable 的效率高一些.
    HashTable 是线程安全的一个集合,不允许 null 值作为一个 key 值或者 Value 值;
    HashTable 是 sychronize(同步化),多个线程访问时不需要自己为它的方法实现同步,而 HashMap 在被多个线程访问的时候需要自己为它的方法实现同步;

    相关文章

      网友评论

          本文标题:三大集合:List、Map、Set的区别与联系

          本文链接:https://www.haomeiwen.com/subject/ovnxmhtx.html