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

      

      

  • 相关阅读:
    Linux常用命令
    Springboot环境搭建_第一个例子
    java 填写一个银行卡如何判断是否真实存在
    java 理解如何实现图片验证码 傻瓜都能看懂。
    编程语言学习路线··
    他他他她她她所唱所写………
    Docker 学习笔记 (4)
    Docker 学习笔记 (3)
    Docker 学习笔记 (2)
    Docker 学习笔记 (1)
  • 原文地址:https://www.cnblogs.com/weiziqiang/p/9043619.html
Copyright © 2011-2022 走看看