zoukankan      html  css  js  c++  java
  • 集合类之Collection接口和Map接口

    先上图:

      

    一、自己了解

      Java的集合类主要有List、Set和Map三大类,其中,List和Set是Collection接口一脉,Map接口自成一脉。

      其中,还有两个工具类Arrays和Collections

    二、学习了解

      1.List

        List的特性是按顺序插入,可重复,允许null值。实现List接口的集合主要有:ArrayList,LinkedList,Vector和Stack。

        简单地讲一下:

        ArrayList是动态数组,底层是数组,默认初始化大小是10,可以动态扩容1.5倍,线程不安全。适用于随机访问。

        LinkedList底层是双向链表,线程不安全。由于是双向链表,访问时需要从头部或者尾部进行遍历,适用于插入删除比较多的操作

        Vector底层也是数组,类似于ArrayList,但是它是线程安全的。

        Stack是继承Vector类的,实现了一个先进后出的栈结构,其中Stack提供了额外的5个方法。基本的push和pop操作,以及peek操作,empty方法判断栈空,search方法检测一个元素在栈中的位置。Stack刚创建后是一个空栈。

      2.Set

        Set的特性是无序,不可重复,允许null值但只允许一个。实现Set接口的集合主要有HashSet、TreeSet、EnumSet

        HashSet底层是用HashMap实现的,用哈希表实现的(数组+链表)

        TreeSet底层是用TreeMap实现的,用的是红黑树实现的。

      3.Map

        上面讲的Collection叫做集合,Map叫做映射。如下图:

        图来源Java3y

        Map集合的特点:将键映射到值得对象,一个映射不能包含重复的键,每个键最多只能映射一个值。

        Map与Collection的区别在于Map是以键值成对存储的,键是唯一的,值是可以重复的;Collection集合存在元素是单独的,其中Set是唯一的,List是可重复的。

        要点在于Map针对键,Collection针对值。

    三、 深入了解(基于JDK1.8)

    1.LinkedList ArrayList Vector的区别

      

    区别之处

    ArrayList

    LinkedList

    Vector

    底层实现

    基于动态数组

    基于双向链表

    基于动态数组

    初始容量

    10

    10

    扩容大小

    增长原数组大小的50%

    增长原数组大小的100%

    是否线程安全

    不安全

    不安全

    安全

    各自优点

    适用随机访问,查询效率比LinkedList和Vector高

    插入速度快,适用于插入和删除较多的操作。

    查询效率比ArrayList低,适用于数据量较大的数据

    2.HashMap HashTable ConcurrentHashMap的区别

      

    区别

    HashMap

    HashTable

    ConcurrentHashMap

    TreeMap

    底层实现

    数组+链表+红黑树

    数组+链表

    JDK1.7 ReentrantLock+Segment+HashEntry

    JDK1.8

    Synchronized+CAS+Node+红黑树

    红黑树

    初始容量

    16(2的n次幂)

    11

    16

    负载因子

    0.75

    0.75

    0.75

    扩容大小

    原大小的2倍

    原大小的2倍+1

    原来的2倍

    是否线程安全

    不安全

    安全

    安全

    不安全

    各自特点

    HashMap可以将空值作为一个表的条目的key或value

     已经过时

    ConcurrentHashMap的key和Value都不能为null

     TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap

    3.HashSet与HashMap   TreeSet与TreeMap的关系

       HashSet依赖HashMap

      

       TreeSet依赖TreeMap

      

      

  • 相关阅读:
    WSP部署错误—SharePoint管理框架中的对象“SPSolutionLanguagePack Name=0”依赖其他不存在的对象
    Elevate Permissions To Modify User Profile
    Error with Stsadm CommandObject reference not set to an instance of an object
    ASP.NET MVC3添加Controller时没有Scaffolding options
    测试使用Windows Live Writer写日志
    配置TFS 2010出现错误—SQL Server 登录的安全标识符(SID)与某个指定的域或工作组帐户冲突
    使用ADO.NET DbContext Generator出现错误—Unable to locate file
    CSS
    HTML DIV标签
    数据库
  • 原文地址:https://www.cnblogs.com/weiziqiang/p/9043619.html
Copyright © 2011-2022 走看看