Java基础

简介: 本文简要介绍了常见数据结构,包括线性结构(如动态数组、链表、栈、队列)、非线性结构(如优先级队列、哈希表、红黑树、跳表、B+树),并列举了Java中的典型实现类,适用于集合类学习与面试参考。

集合类

1. 你知道的数据结构有哪些

线性结构

·动态数组:相对于普通数组可以扩容。

java 中 ArrayList 就属于动态数组

数组的特点是其中元素是连续存储的

链表:由多个节点链在一起

java 中的 LinkedList 就属于链表

链表的特点是其中元素是不连续存储的,每次需要根据当前节点,才能找到相邻节点·栈:符合 First In Last Out(先进后出)规则

java 中的 LinkedList 可以充当栈

它的 push 方法向栈顶添加元素

它的 pop 方法从栈顶移除元素

它的 peek 方法从栈顶获取元素(不移除)·队列:符合 FirstIn First Out(先进先出)规则

java 中 LinkedList 也可以充当队列

它的 offer 方法用来向队列尾部添加元素(入队)

它的 poll方法用来从队列头部移除元素(出队)非线性结构。

优先级队列:在队列基础上增加了优先级,队列会根据优先级调整元素顺序,保证优先级高的元素先出队java 中 PriorityQueue 可以作为优先级队列

它底层用大顶堆或小顶堆来实现

它适用于实现排行榜、任务调度等编码它特别适合于流式数据的处理,利用它能够大大节省内存Hash 表(哈希表,也叫散列表):由多对 key-value 组成,会根据 key 的 hash 码把它们分散存储在数组当中,其中 key 的 hash 码与数组索引相对应。

java 中的 HashMap,Hashtable 都属于哈希表

它特别适用于实现数据的快速查找

红黑树:可以自平衡的二又查找树,相对于线性结构来说,拥有更好的性能

java 中的 TreeMap 属于红黑树

跳表:多级链表结构,也能达到与红黑树同级的性能,且实现更为简单java 中的 ConcurrentSkipListMap 用跳表结构实现redis 中的 SortedSet 也是用跳表实现B+ 树:可以自平衡的 N 又查找树

关系型数据库的索引常用 B+ 树实现

PS.

以上数据结构不必全部掌握,根据自己实际情况,捡熟悉的回答即可

以上仅是这些数据结构的简述,关于它们的详细讲解,请参考黑马《数据结构与算法》课程上篇 https://www.bilibili.com/video/BV1Lv4y1e7HL下篇 https://www.bilibili.com/video/BV1rv4y1H7o6

相关文章
|
1天前
|
Java Maven Spring
SpringBoot中如何自定义starter
自定义Spring Boot Starter通常包含两个模块:starter负责依赖管理,autoconfigure实现自动配置。前者引入后者。在autoconfigure中,通过@Configuration和@Bean定义配置类与Bean,并结合@Conditional条件注解控制Bean的创建;最后在META-INF/spring.factories(或Spring Boot 3的xxx.imports文件)中注册自动配置类全名,完成自动化配置。
|
1天前
|
索引
HashMap 原理(方法执行流程)
以put方法为例,介绍HashMap的工作原理:先通过key的hashCode计算哈希值,并进行二次哈希提升分布均匀性;若数组未初始化则创建默认容量为16的数组;利用(n-1)&hash计算桶下标,确保高效定位;根据桶位状态分别处理:空位直接插入、链表遍历更新或尾插并判断树化、红黑树则按树逻辑新增;最后检查是否需扩容。
|
1天前
|
索引
HashMap 原理(数据结构)
HashMap底层由数组、链表和红黑树构成。数组通过hashCode定位元素,实现O(1)存取;但容量有限,易发生冲突。冲突时用链表串联,但链表过长会降性能。因此当链表长度≥8且数组容量≥64时,转为红黑树,将查找复杂度从O(n)降为O(log n),提升效率;节点减少时则退回链表。
|
1天前
|
存储 关系型数据库 MySQL
为什么MySQL索引结构是B+tree
MySQL采用B+树作为索引结构,因其非叶子节点仅存键和指针,使每页可存储更多键,树层级更浅,查询更快。所有数据集中于叶子节点,查询效率稳定,且叶子节点形成双向链表,支持高效范围查询。
|
1天前
|
存储 SQL 关系型数据库
什么是回表查询
MySQL中InnoDB引擎的聚簇索引将数据与索引存储在一起,叶子节点存整行数据,每表仅一个;二级索引则分离存储,叶子节点存主键值。回表查询需先查二级索引再查聚簇索引,性能较低。优化方式包括:优先主键查询、使用联合索引实现覆盖索引、利用MySQL 5.6+的索引下推功能,在存储引擎层提前过滤,减少回表次数,提升查询效率。(238字)
|
1天前
|
搜索推荐
冒泡排序与其它排序算法比较
冒泡、选择、插入排序时间复杂度均为O(n²)。冒泡稳定,可优化至O(n),交换频繁;选择不稳定,交换次数少;插入稳定,对有序数组高效,三者中交换最少。相较其他高级排序无时间优势。
|
1天前
|
Java Spring 容器
SpringBoot自动配置的原理是什么
SpringBoot自动配置核心是@EnableAutoConfiguration注解,通过@Import导入配置选择器,读取classpath下META-INF/spring.factories中配置的全类名,结合@Conditional条件注解决定是否加载Bean。自3.0版本起,该文件被替换为XXxxxSpringAutoConfiguration.imports。
|
1天前
|
Java Spring
Spring Boot配置的优先级
SpringBoot项目支持多种配置方式,主要包括配置文件(application.properties、yml、yaml)和外部配置(系统属性、命令行参数)。优先级从高到低为:命令行参数 > Java系统属性 > application.properties > application.yml > application.yaml。
|
1天前
|
SQL 监控 关系型数据库
如何定位出项目中的慢SQL
在项目开发中,定位慢SQL是常见问题。可通过链路追踪工具(如SkyWalking)分析调用链耗时,精准定位慢接口及慢SQL;若无监控工具,可开启MySQL慢查询日志,配置阈值记录执行时间较长的SQL,进而优化性能。
|
1天前
|
SQL 索引
索引失效的场景
本文结合项目经验,总结了索引失效的常见场景:违反最左前缀法则、范围查询右侧列失效、索引列进行函数运算、隐式类型转换、未加引号的字符串匹配及%开头的like查询。同时建议使用explain分析执行计划,关注key、type和extra字段,优化SQL性能。