zoukankan      html  css  js  c++  java
  • List,Set,Map

    1、Collection 和 Map 的区别

    容器内每个为之所存储的元素个数不同。
    Collection类型者,每个位置只有一个元素。List,Set
    Map类型者,持有 key-value pair,像个小型数据库。

    2、各自旗下的子类关系

    Collection
        --List: 将以特定次序存储元素。所以取出来的顺序可能和放入顺序不同。有序
              --ArrayList / LinkedList / Vector
        --Set : 不能含有重复的元素    无序不重复
              --HashSet / TreeSet
    Map     键值对
        --HashMap
        --HashTable
        --TreeMap

    List特点:元素有放入顺序,元素可重复 

    Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的) 

    Map特点:元素按键值对存储,无放入顺序 

    3.具体实例

    List:

    LinkedList:底层基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢 

    ArrayList:非线程安全的,数组队列,相当于动态数组。它由数组实现,随机访问效率高,随机插入、随机删除效率低

    Vector:线程安全的,效率低 ;矢量队列,和ArrayList一样,它也是一个动态数组,由数组实现

    Set:

    HashSet:为快速查找而设计的Set,存入HashSet的元素必须定义hashCode,底层由HashMap实现

    LinkedHashSet :具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序),所以在使用迭代器遍历Set时,结果会被元素插入的次序显示。元素也必须定义hashCode()方法。

    TreeSet:SortedSet接口唯一的实现类,保持次序的Set,底层由平衡二叉树实现, 使用它可以从Set中提取有序的序列。元素必须实现Comparable接口,是按对象的比较函数对元素进行排序。

    Map:

    HashMap:Map基于散列表的实现,插入和查询“键值对”的开销是固定的。可以通过构造器设置容量和负载因子,以调整容器的性能。

      HashMap非线程安全,高效,支持null;HashTable线程安全,低效,不支持null 

    LinkedHashMap:使用链表维护内部次序(插入次序)

    TreeMap:基于红黑树的实现,特点在于所得到的结果是经过排序的。subMap()/方法返回一个子树

    ConcurrentHashMap:一种线程安全的Map,不涉及同步加锁

    WeakHashMap:允许释放映射所指向的对象

    IdentityHashMap:用==代替equals方法

    3、其他特征

    *  List,Set,Map将持有对象一律视为Object型别。
    *  Collection、List、Set、Map都是接口,不能实例化。
       继承自它们的 ArrayList, Vector, HashTable, HashMap是具象class,这些才可被实例化。
    *  vector容器确切知道它所持有的对象隶属什么型别。vector不进行边界检查。

    4. 存取

    1. List 通过下标来存取 和值来存取    add/get
    2. Map 键值对应来存取      put(k,v) / get(k)    keySet()抽取key序列   values()抽取value序列
    3. set 存取元素是无序的    set.add("a") /  set.iterator().hasNext()

    线程安全:

    synchronized  多线程的同步机制对资源进行加锁,使得在同一个时间,只有一个线程可以进行操作,同步用以解决多个线程同时访问时可能出现的问题

     hashing
           哈希码就是将对象的信息经过一些转变形成一个独一无二的int值,这个值存储在一个array中。
           所有存储结构中,array查找速度是最快的。所以,可以加速查找。
           发生碰撞时,让array指向多个values。即,数组每个位置上又生成一个梿表。

    Array , Arrays

    Java所有“存储及随机访问一连串对象”的做法,array是最有效率的一种。

    1、array效率高,但容量固定且无法动态改变。

    array还有一个缺点是,无法判断其中实际存有多少元素,length只是告诉我们array的容量。

    2、Java中有一个Arrays类,专门用来操作array
      arrays中拥有一组static函数,
     equals():比较两个array是否相等。array拥有相同元素个数,且所有对应元素两两相等。
     fill():将值填入array中。
     sort():用来对array进行排序。
     binarySearch():在排好序的array中寻找元素。
     System.arraycopy():array的复制。

     

  • 相关阅读:
    敏捷开发设计模式的五大原则(读敏捷软件开发:原则、模式与实践笔记记录一下)
    使用AOP和Semaphore对项目中具体的某一个接口进行限流
    java正则使用全记录!
    推荐一本书学习springcloud书籍的SpringCloud微服务全栈技术与案例解析
    使用springboot Admin 2.0.6版本 集成监控springcloud微服务应用
    推荐一本学习Groovy的书籍Groovy程序设计!
    Datagrip 快捷键和常用插件持续更新一集一些使用技巧
    Eclipse中项目不会自动编译问题的坑和注意点
    使用Groovy的mixin方法注入,和mixedIn属性实现过滤链
    vscode常用快捷键和插件(持续更新),以及一些常用设置的坑和技巧
  • 原文地址:https://www.cnblogs.com/kxdblog/p/4318074.html
Copyright © 2011-2022 走看看