zoukankan      html  css  js  c++  java
  • 三大集合:List、Map、Set的区别与联系

    List、Map、Set的区别与联系

    一、结构特点

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

    二、实现类

    1. List接口有三个实现类:
      1.1 LinkedList
      基于链表实现,链表内存是散列的,增删快,查找慢;
      1.2 ArrayList
      基于数组实现,非线程安全,效率高,增删慢,查找快;
      1.3 Vector
      基于数组实现,线程安全,效率低,增删慢,查找慢;
    2. Map接口有四个实现类:
      2.1 HashMap
      基于 hash 表的 Map 接口实现,非线程安全,高效,支持 null 值和 null
      键;
      2.2 HashTable
      线程安全,低效,不支持 null 值和 null 键;
      2.3 LinkedHashMap
      是 HashMap 的一个子类,保存了记录的插入顺序;
      2.4 SortMap 接口
      TreeMap,能够把它保存的记录根据键排序,默认是键值的升序排序

    3. Set接口有两个实现类:
      3.1 HashSet
      底层是由 Hash Map 实现,不允许集合中有重复的值,使用该方式时需要重写 equals()和 hash Code()方法;
      3.2 LinkedHashSet
      继承于 HashSet,同时又基于 LinkedHashMap 来进行实现,底层使用的是 LinkedHashMap

    3 区别

      1. List 集合中对象按照索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索对象,例如通过list.get(i)方法来获取集合中的元素;

      2. Map 中的每一个元素包含一个键和一个值,成对出现,键对象不可以重复,值对象可以重复;

      3. Set 集合中的对象不按照特定的方式排序,并且没有重复对象,但它的实现类能对集合中的对象按照特定的方式排序,例如 Tree Set 类,可以按照默认顺序,也可以通过实现 Java.util.Comparator<     Type >接口来自定义排序方式。

    4 补充:HashMapHashTable

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

  • 相关阅读:
    扫面线模板
    (动态规划、栈)leetcode 84. Largest Rectangle in Histogram, 85. Maximal Rectangle
    tmux 常见命令汇总
    leetcode 221
    leetcode 319 29
    (贪心)leetcode 392. Is Subsequence, 771. Jewels and Stones, 463. Island Perimeter
    leetcode 982 668
    Python import 同文件夹下的py文件的函数,pycharm报错
    Windows里Anaconda-Navigator无法打开的解决方案
    Windows下 gpu版 Tensorflow 安装
  • 原文地址:https://www.cnblogs.com/677-code/p/9738652.html
Copyright © 2011-2022 走看看