集合

作者: 月如钩dgf | 来源:发表于2021-08-28 17:40 被阅读0次

一 HashMap:

1 Map就是存储键值对(<key,value>)的一个集合。
2.HashMap的原理:
HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的
HashMap的主干是一个Entry数组Entry是HashMap的基本组成单元,每一个Entry包含一个key-value键值对。
3.jdk1.7和jdk1.8之间的区别:
jdk1.8在jdk1.7之上增加了红黑树来进行性能优化,即当链表超过8时链表转换为红黑树和数组。
注:HashMap的key是唯一的不能重复,可以为空且只能有一个值为空,value可以重复相同。
扩容机制:loadFactory默认是0.75,设置固定大小2的N次幂方便运算均匀分布。
数据 线程不安全。
重写equls方法必须重写hashcode方法。

二,ConcurrentHashMap

1.概念
锁分段式技术,将数据进行一段一段存储,然后每段数据分配一把锁,当一个线程占用一段数据的时候其他线程也可以访问其他数据
2.数据结构
Node数组+链表+红黑树的数据结构
3.线程安全
CAS+synchronized

三,ArrayList和LinkedList

1.数据结构:ArrayList是动态数组的数据结构,LinkedList是双向链表的数据结构。
2.对于随机访问get和set,ArrayList要优于LinkedList, LinkedList要移动指针比较慢。对于新增和删除操作add和remove ,LinkedList要占优势,Array'List要移动数据。
ArrayList的内部实现是基于基础的对象数组的,因此,它使用get方法访问列表中的任意一个元素时(random access),它的速度要比LinkedList快(O1)。LinkedList中的get方法是按照顺序从列表的一端开始检查,直到另外一端(On)。对LinkedList而言,访问列表中的某个指定元素没有更快的方法了,要对list进行大量的插入和删除操作时,LinkedList也是一个较好的选择。
使用:当操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能;当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了

Arraylist的主要源码参数:

  private static final int DEFAULT_CAPACITY = 10;
  // ArrayList的默认长度是多少
    private static final Object[] EMPTY_ELEMENTDATA = {};
  // ArrayList的默认空元素链表
    private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
  // ArrayList存放的数据
    transient Object[] elementData; // non-private to simplify nested class access
  // ArrayList的长度
    private int size;

扩容机制:(默认的初始长度是10)
扩容的规则也在源码中有体现,扩容后的大小= 原始大小+原始大小/2 + 1。在进行插入等操作的时候,如果判断出大小不够,会依据此方法进行扩容。(以上是JDK1.6版本的源码,在JDK1.7中扩容规则进行了修改,改为了扩容后的大小= 原始大小+原始大小/2)

LinkedList扩容机制:

由于它的底层是用双向链表实现的,没有初始化大小,也没有扩容的机制

相关文章

  • 我的Swift的学习总结 -->第二周

    集合 集合:Set,定义一个集合可以写成:var 集合名 : Set<集合类型> = [集合元素],具体的集合应用...

  • markdown 测试

    集合 集合 集合 引用

  • kotlin学习第五天:集合,高阶函数,Lambda表达式

    集合 list集合 list集合分为可变集合与不可变集合。由list of创建的集合为不可变集合,不能扩容,不能修...

  • kotlin练习 ---- 集合练习

    kotlin练习 - 集合练习 Set集合 Set集合创建 Set集合的使用 List集合 List集合创建 Li...

  • 集合总结

    集合 集合分为单列集合和双列集合两种: 一.单列集合: Collection是单列集合的顶级接口: 其中有三类集合...

  • 映射、元组、集合

    映射 元组 集合 集合之seq 集合之set 集合之map

  • 16.Collection集合

    主要内容: Collection 集合 迭代器 增强for List 集合 Set 集合 1,集合 集合是java...

  • 集合与有序集合

    集合分为有序集合 (zset) 和无序集合 (set), 一般无序集合也直接说成集合 无序集合 (set) 无序集...

  • python入坑第八天|集合

    好的,各位蛇友,我们今天来学习集合。 内容: 集合的创建 集合操作符号 集合的内置函数 集合的创建 集合用set(...

  • 集合框架

    集合框架的概念 集合:存放数据的容器 集合框架:java中,用于表示集合,以及操作集合的类和接口的统称 数组与集合...

网友评论

      本文标题:集合

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