美文网首页
Java集合类快速了解

Java集合类快速了解

作者: BoYueStudio | 来源:发表于2020-12-22 20:13 被阅读0次

    常用的数据结构

    数组

    数组和链表都是线性表结构,数组在内存中是一串连续的内存空间,比如定义一个 int 类型数组,int[] array = new int[6],计算机会为 array 分配一块连续的空间。

    链表

    链表是一种最常见的数据结构,其内部数据呈线性排列,属于线性表结构,什么是线性表?表中的数据按顺序依次排列,就像用一条线把数据串联起来一样。

    数组和链表有什么区别?

    数组会在内存当中开辟一块连续的存储空间,需要指定长度数组当中的每一个元素都有索引,查询的话通过索引可以直接定位到某一个元素,效率很高。但是进行删除的话,数组会进行移动,所以效率很低。

    链表不需要连续的存储单元,链表中的上一个元素通过指针指向下一个元素。所以链表结构进行查询的话,头部尾部比较快,中间元素查找速度比较慢。但是删除的话,只需要删除前后指针,重新建立指针就可以了,所以删除的性能很高。

     集合类或集合框架

    图|集合类总结图

    collection接口是集合类的顶层接口,collections是工具类。collection有两个子接口,一个list接口,一个是set接口。

     list接口

    特点:list接口有序可重复。

    常用的实现类:

    arrayList  基于数组实现的。

    linkedList  基于链表实现的,区别参考数组和链表区别。

    vector  基于数组实现的,但是是线程安全的(synchronized)。

    copyOnwriteArrayList  复制数组副本来实现。

    set接口

    特点:set接口无序不可重复

    常用的实现类:

    HashSet  基于hashMap来实现的,实现不可重复是通过 hashCode方法和equals方法进行两次比较,先比较hashCode,再通过equals。

    TreeSet  基于二叉树来实现的,可以对元素进行排序(排序规则默认是自然顺序,可以自定义比较器,实现自定义排序)。

    Map接口,key value结构的。

    map接口

    特点:key value结构。

    常用实现类:

    HashMap  key不可重复,无序,可以为null。实现原理 :基于数组和链表来实现的,当存入一组键值对的时候,先对key进行hash,然后映射到一个初始化长度为16的数组上,当不同的key产生hash碰撞的时候,value会通过链表结构来进行存储。jdk1.8之后对hashMap进行了改进,当链表长度达到临界值8,会通过红黑树来存储value。hashMap有两个参数,一个是初始化数组长度16,负载因子0.75。当满足扩容阈值的时候(当数组的12个元素被存满,并且有hash碰撞了),动态扩容,以2倍的增长方式进行扩容。

    HashTable HashTable是线程安全的hashMap(synchronized机制),key不准许为null。TreeMap基于二叉树来实现的,可对key进行自然排序(自定义比较器,写比较规则)。

    ConcurrentHashMap是线程安全的,对整个hash桶采用分段策略,拆分成若干个段segment,对每一个段上锁(synchronized),极大的提高了并发修改的效率。

    相关文章

      网友评论

          本文标题:Java集合类快速了解

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