编程进阶网编程进阶网
  • 基础组成体系
  • 程序编程原理
  • 异常和IO系统
  • 六大设计原则
  • 设计模式导读
  • 创建型设计模式
  • 结构型设计模式
  • 行为型设计模式
  • 设计模式案例
  • 面向对象思想
  • 基础入门
  • 高级进阶
  • JVM虚拟机
  • 数据集合
  • Java面试题
  • C语言入门
  • C综合案例
  • C标准库
  • C语言专栏
  • C++入门
  • C++综合案例
  • C++专栏
  • HTML
  • CSS
  • JavaScript
  • 前端专栏
  • Swift
  • iOS入门
  • 基础入门
  • 开源库解读
  • 性能优化
  • Framework
  • 方案设计
  • 媒体音视频
  • 硬件开发
  • Groovy
  • 常用工具
  • 大厂面试题
  • 综合案例
  • 网络底层
  • Https
  • 网络请求
  • 故障排查
  • 专栏
  • 数组
  • 链表
  • 栈
  • 队列
  • 树
  • 递归
  • 哈希
  • 排序
  • 查找
  • 字符串
  • 其他
  • Bash脚本
  • Linux入门
  • 嵌入式开发
  • 代码规范
  • Markdown
  • 开发理论
  • 开发工具
  • Git管理
  • 百宝箱
  • 开源协议
  • 技术招聘
  • 测试经验
  • 职场提升
  • 技术模版
  • 关于我
  • 目标清单
  • 学习框架
  • 育儿经验
  • 我的专栏
  • 底层能力
  • 读书心得
  • 随笔笔记
  • 职场思考
  • 中华历史
  • 经济学故事
  • 基础组成体系
  • 程序编程原理
  • 异常和IO系统
  • 六大设计原则
  • 设计模式导读
  • 创建型设计模式
  • 结构型设计模式
  • 行为型设计模式
  • 设计模式案例
  • 面向对象思想
  • 基础入门
  • 高级进阶
  • JVM虚拟机
  • 数据集合
  • Java面试题
  • C语言入门
  • C综合案例
  • C标准库
  • C语言专栏
  • C++入门
  • C++综合案例
  • C++专栏
  • HTML
  • CSS
  • JavaScript
  • 前端专栏
  • Swift
  • iOS入门
  • 基础入门
  • 开源库解读
  • 性能优化
  • Framework
  • 方案设计
  • 媒体音视频
  • 硬件开发
  • Groovy
  • 常用工具
  • 大厂面试题
  • 综合案例
  • 网络底层
  • Https
  • 网络请求
  • 故障排查
  • 专栏
  • 数组
  • 链表
  • 栈
  • 队列
  • 树
  • 递归
  • 哈希
  • 排序
  • 查找
  • 字符串
  • 其他
  • Bash脚本
  • Linux入门
  • 嵌入式开发
  • 代码规范
  • Markdown
  • 开发理论
  • 开发工具
  • Git管理
  • 百宝箱
  • 开源协议
  • 技术招聘
  • 测试经验
  • 职场提升
  • 技术模版
  • 关于我
  • 目标清单
  • 学习框架
  • 育儿经验
  • 我的专栏
  • 底层能力
  • 读书心得
  • 随笔笔记
  • 职场思考
  • 中华历史
  • 经济学故事
  • 代码规范
  • Markdown
  • 开发理论
  • 开发工具
  • Git管理
  • 百宝箱
  • 开源协议
  • 技术招聘
  • 测试经验
  • 测试经验
  • 职场提升
  • 技术模版

数据结构问题汇总

目录介绍

  • 01.数组相关问题
  • 02.链表相关问题
  • 03.栈相关问题
  • 04.队列相关问题
  • 05.树相关问题
  • 06.排序相关问题
  • 07.查找相关问题
  • 09.散列相关问题
  • 10.字符串相关问题
  • 11.递归相关问题
  • 12.哈希算法问题
  • 15.常用数据结构

01.数组相关问题

  • 数组设计相关问题
    • 数组具有什么样的特性?说一下数组初始化操作?如何理解空间连续?数组使用场景有哪些?
    • 数组有什么样的缺点?数组创建为何需要注意初始化长度?数组如何根据下标访问数据?下标内存地址值如何计算?
    • 数组查找的时间复杂度是多少?为什么说数组插入是低效的?那么如何提高数据的插入效率呢?
  • 数组算法相关问题
    • 算法1:用类封装数组,要求可以添加数据,在指定索引添加数据,删除数据,查询数据,遍历数据等操作
    • 算法2:给定一个排序数组[0,0,1,1,1,2,2,3,3,4],需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
    • 算法3:啤酒每罐2.3元,饮料每罐1.9元。小明买了若干啤酒和饮料,一共花了82.3元。请你计算他买了几罐啤酒。
    • 算法4:给定一个非空整数数组[4,1,2,1,2],除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
    • 算法5:找出常用数字,给你一个长度为n的数组,其中有一个数字出现的次数至少为n/2,找出这个数字。比如输入: [1,1,1,2,5,7,8,8,8,8,10],输出: 8
    • 算法6:调整奇数和偶数顺序,输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位予数组的后半部分。比如[1,3,4,5,6,8,2],输出[1,3,5,4,6,8,2]
    • 算法7:最小的第K个数,输入n个整数,找出其中最小的k个数。例如输入4 、5 、1、6、2、7、3 、8 ,这8个数字,则最小的4个数字是1、2、3、4
    • 算法8:数组中重复的数字,例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3

02.链表相关问题

  • 链表设计相关问题
    • 链表应用场景有那些?链表存储数据和数组存储数据有什么区别?存储相同的数据占用空间比较?
  • 链表算法相关问题

11.哈希算法问题

  • 哈希算法介绍
    • 什么是哈希算法?常见的有哪些?优秀的哈希算法需要具备那些要求?哈希算法常常用在那些场景?
  • 哈希算法场景
    • 数据安全加密常用那种哈希算法?加密算法有哪些重要的点?MD5加密是绝对安全的吗?
    • 如何从海量图片中搜索一张图?如果要给图片打标示,则如何取它的唯一性?如何保证图片唯一标示和图片对应起来?
    • BT下载数据如何校验数据的完整性?哈希算法还用到了那些数据校验的场景?
    • 散列函数一般用在那种场景,这种哈希算法对碰撞要求高吗?如何让散列值更加均匀地分布?
    • 哈希冲突如何理解?一般是怎么解决哈希冲突的,结合实际案例说一下,怎么降低哈希冲突?
  • 哈希算法问题
    • MD5加密算法的原理是什么?如何增强MD5的安全性?常见MD5破解如何做的?
    • Hash的使用场景有哪些?Hash表是如何提高查找速度的?Hash为何会有冲突?如何解决哈希冲突?
    • HashCode作用是什么?可直接用hashcode判断两个对象是否相等?HashMap中是如何使用HashCode提高去重的逻辑?

15.常用数据结构

  • 数组
    • 数组:在java中,声明一个数组过程中,是如何分配内存的?如何实现数组逆置?如何权衡是使用无序的数组还是有序的数组?怎么判断数组是 null 还是为空?
  • List集合
    • fail-fast:什么是Java集合的快速失败机制 “fail-fast”?单线程迭代器遍历移除会“fail-fast”吗?多线程如何解决这种异常?
    • List集合:ArrayList和LinkedList的区别?为什么说LinkedList 在插入和删除数据时效率更高?有没有在优化的可能?
    • Array:Array 和 ArrayList 有什么区别?什么时候该应 Array 而不是 ArrayList 呢?
    • LinkedList: 它是单向链表还是双向链表?链表有什么样的特点?插入数据时,ArrayList, LinkedList, Vector谁速度较快?为什么?
  • Set集合
    • Set集合:HashSet是如何保证数据不可重复的?HashSet和TreeSet有什么区别?TreeMap和TreeSet在排序时如何比较元素?
    • Set集合:Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用 == 还是 equals()? 它们有何区别?集合Set实现Hash怎么防止碰撞?
  • Map集合
    • HashMap:HashMap的实现机制,底层数据结构是什么?如果Hash冲突了怎么解决?HashMap的put方法的具体流程?怎么样HashMap线程安全?
    • HashMap:HashMap扩容操作是怎么实现的?是怎么解决哈希冲突的?HashMap为什么不直接使用hashCode()处理后的哈希值直接作为table的下标?
    • HashMap:为什么HashMap中String、Integer这样的包装类适合作为K?如果我想要让自己的Object作为K应该怎么办呢?
    • ConcurrentHashMap:ConcurrentHashMap的具体实现知道吗?如何实现高效地线程安全?如何实现分段锁?
    • TreeMap:TreeMap 是采用什么树实现的?TreeMap、HashMap、LandedHashMap的区别。
    • LinkedHashMap:它是如何实现有序?它是如何实现淘汰数据的?put和get分别做了什么操作?
贡献者: yangchong211