美文网首页
java基础

java基础

作者: 吃货_ee62 | 来源:发表于2021-06-25 17:29 被阅读0次

HashMap

数据结构
数组

ArrayList和LinkedList的区别实值数组和链表的区别

用连续的存储单元存储数据。(有索引)

特点:查询快(O(1)),删除和插入慢(O(N))

注:因为连续的存储单元,所以新增,删除数据时,存储单元下标都要整体移动,进行插入和
删除。


image.png
链表

查询慢,插入快

产生hash冲突用链表

是一种物理存储单元上非连续,非顺序的存储结构(无索引)

特点:插入快,查找慢(插入,删除的时间复杂度为 O(1),查找遍历的时间复杂度为O(N))

注:删除其实和插入一样,删除直接给值赋null,因为无索引,所以需要从头节点遍历到尾节点

image.png

算法:哈希算法(也叫散列)

就是把任意长度值(key)通过散列算法变换成固定长度的key(地址)通过这个地址进行访问的数据结构。

它通过把键值码映射到表中一个位置来访问记录,以加快查找速度。

即通过字符串算出它的ascii编码(阿斯克编码),进行mod(取模),算出哈希表的下标。

ascii编码(阿斯克编码)会重复,mod(取模)来减少数组长度,产生哈希冲突(碰撞)

1.7之前插入,用头插法,头插法在多线程的时候会引起一些问题,如循环链表,耗尽cpu性能

为了解决这个问题,1.8后插入,采用尾插法

红黑树(O(logn))

查询比链表快,但是插入比链表慢

jdk8新增了红黑树数据结构

红黑树维持 小中大 左中右 这样的结构

TREEIFY_THRESHOLD =8 阙值 ??因为有一个定理 根据统计学 统计出来的,叫泊松定理。

当链表的长度 >=8 时会转换为红黑树,小于用链表

线程池

原理:在线程池内创建一定数量的线程对象放到缓冲池里面,当来任务时候,把任务放在线程中执行;

当任务大于缓冲池中的线程时,可以先把任务放在队列中存储,等待之前任务执行完成,释放线程;

当队列(FIFIO原则,即先进先出)中的长度达到限制时,有些任务存储不下,线程池会再次创建线程对象,与队列中的进行完成任务;

当线程池线程数达到最大线程数时,执行拒绝策略;

待续。。。。。。。

相关文章

  • Java 基础

    Java 基础01Java开发入门 Java 基础02Java编程基础 Java 基础03面向对象 Java 基础...

  • 技术体系

    一,java核心 java基础,jvm,算法,多线程,设计模式 Java基础:java基础相关,全栈java基础 ...

  • 面试题汇总

    1.Java基础面试问题 Java基础之基础问题 Java基础之面向对象 Java基础之数据结构 Java基础之I...

  • 【Android】知识点汇总,坚持原创ing

    Android基础 Java基础 Java基础——Java内存模型和垃圾回收机制 语法基础 语法基础——C语法基础...

  • Java基础:反射

    反射注解动态代理相关阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 ...

  • Java基础:注解

    系列阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 1. 概述 注解...

  • Java基础:动态代理

    系列阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 概述 在运行时,...

  • Java 集合类原理

    Java基础——HashMap源码分析 Java基础——HashSet源码分析 Java基础——HashTable...

  • Java基础:类加载器

    系列阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 1. 什么是类加...

  • java基础(一)-String、StringBuffer、St

    java基础-String、StringBuffer、StringBuilder java基础小白,初学java,...

网友评论

      本文标题:java基础

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