数据结构是面试一定会问的问题。
1.常用的数据结构有哪些?
set,list,map,Quene.二叉树
set子类:
HashSet:HashSet不能保证元素的排列顺序;使用Hash算法来存储集合中的元素,有良好的存取和查找性能;通过equal()判断两个元素是否相等,并两个元素的hashCode()返回值也相等。
TreeSet是SortedSet接口的实现类,根据元素实际值的大小进行排序;采用红黑树的数据结构来存储集合元素;支持两种排序方法:自然排序(默认情况)和定制排序。前者通过实现Comparable接口中的compareTo()比较两个元素之间大小关系,然后按升序排列;后者通过实现Comparator接口中的compare()比较两个元素之间大小关系,实现定制排列。

list子类:
ArrayList:
底层数据结构是数组,查询快,增删慢。 线程不安全,效率高。 空间不足时,增加原来空间的50%。
Vector:
底层数据结构是数组,查询快,增删慢。 线程安全,效率低。 空间不足时,增加原来空间的一倍。 Vector相对ArrayList查询慢(线程安全的) ,Vector相对LinkedList增删慢(数组结构)
LinkedList: 底层数据结构是链表,查询慢,增删快。 线程不安全,效率高。

Map子类:HashMap、Hashtable、 ConcurrentHashMap,LinkedHashMap、TreeMap
HashMap基于AbstractMap类,实现了Map、Cloneable(能被克隆)、Serializable(支持序列化)接口; 非线程安全;允许存在一个为null的key和任意个为null的value;采用链表散列的数据结构,即数组和链表的结合;初始容量为16,填充因子默认为0.75,扩容时是当前容量翻倍,即2capacity,hashmap采用拉链法解决冲突。

何保证HashMap线程安全?
ConcurrentHashMap是线程安全的HashMap,它采取锁分段技术,将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问。在JDK1.8中对ConcurrentHashmap做了两个改进:
取消segments字段,直接采用transient volatile HashEntry<K,V>[] table保存数据,将数组元素作为锁,对每一行数据进行加锁,可减少并发冲突的概率
数据结构由“数组+单向链表”变为“数组+单向链表+红黑树”,使得查询的时间复杂度可以降低到O(logN),改进一定的性能。

HashMap实现有序?
HashMap是无序的,而LinkedHashMap是有序的HashMap,默认为插入顺序,还可以是访问顺序,基本原理是其内部通过Entry维护了一个双向链表,负责维护Map的迭代顺序。

HashMap在put、get元素的过程?体现了什么数据结构?
向Hashmap中put元素时,首先判断key是否为空,为空则直接调用putForNullKey(),不为空则计算key的hash值得到该元素在数组中的下标值;如果数组在该位置处没有元素,就直接保存;如果有,还要比较是否存在相同的key,存在的话就覆盖原来key的value,否则将该元素保存在链头,先保存的在链尾。
从Hashmap中get元素时,计算key的hash值找到在数组中的对应的下标值,返回该key对应的value即可,如果有冲突就遍历该位置链表寻找key相同的元素并返回对应的value
由此可看出HashMap采用链表散列的数据结构,即数组和链表的结合,在Java8后又结合了红黑树,当链表元素超过8个将链表转换为红黑树。

二叉树:
B+树:
平衡二叉树(AVL树):各个结点左右子树深度差的绝对值不超过1。
哈夫曼树:带权路径长度最小的二叉树称为最优二叉树。哈夫曼树构造不唯一,但所有叶子结点的带权路径长度之和都是最小的。
红黑树:一种自平衡二叉查找树,它的性质有:
节点是红色或黑色。
根节点是黑色。
每个叶子节点都是黑色的空节点(NIL节点)。
每个红色节点的两个子节点都是黑色。
从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

2.各个数据结构的底层实现原理?
二叉树遍历等?
插入,删除,查找效率的比较?
线程安全?
你用过哪些?

3.手写代码
链表排序,反转?
map排序?

java:数据结构面试题相关推荐

  1. 灵魂拷问!java数据结构面试题

    MySQL 数据库最佳学习线路脑图: 一. 对MySQL 的认识 认识Mysql数据库 下载安装MySQL软件 在Linux系统环境下安装MySQL MySOL体系结构与存储引擎 MySQL体系结构 ...

  2. 从零开始学Java编程!java数据结构面试题

    一.Spring Boot 相关 (1)SpringBoot 面试专题 什么是 Spring Boot? Spring Boot 有哪些优点? 什么是 JavaConfig? 如何重新加载 Sprin ...

  3. 考研英语真题笔记 2020,Java数据结构面试题及答案

    They housed(给-房子住) eight adult rats with two types of robotic rat(机械老鼠) - one social(社会的,社交的) and on ...

  4. Java 程序员必须掌握的 8 道数据结构面试题,你会几道

    转载自  Java 程序员必须掌握的 8 道数据结构面试题,你会几道 瑞士计算机科学家Niklaus Wirth在1976年写了一本书,名为<算法+数据结构=编程>. 40多年后,这个等式 ...

  5. 【100道面试题真题讲解】C++面试题讲解+JAVA面试题讲解+Linux面试题讲解+数据结构面试题+计算机网络面试题 讲解视频-持续更新中

    最近找到了一个非常好的公众号:IT笔试面试真题讲解,每天视频分享一道IT公司面试高频题目,完全免费哦,非常适合找工作的学生复习+总结+提炼. 白嫖不敢独吞,分享给大家,也给作者增加一点访问量,鼓励作者 ...

  6. 数据结构面试题编程题_您下次编程面试时应该了解的顶级数据结构

    数据结构面试题编程题 by Fahim ul Haq 通过Fahim ul Haq Niklaus Wirth, a Swiss computer scientist, wrote a book in ...

  7. 数据结构面试题(史上最全面试题,精心整理100家互联网企业,面试必过)

    最全面试题,精心整理100家互联网企业面经,祝你面试成功.面试必过(2023优化版)已发布在个人微信公众号[面向Offer学编程],优化版首先修正了读者反馈的部分答案存在的错误,同时根据最新面试总结, ...

  8. 常见的数据结构面试题

    常见的数据结构面试题,看看你能做出几题来 2007年01月11日 星期四 14:15 1.       在一个单链表中p所指结点之前插入一个s (值为e)所指结点时,可执行如下操作: q=head; ...

  9. c++数据结构面试题(附答案)

    c++数据结构面试题(附答案) 1.设一组初始关键字记录关键字为(20,15,14,18,21,36,40,10),则一轮冒泡排序结束后的结果为? 答案: 升序:15,14,18,20,21,36,1 ...

  10. java机试 数据结构_Java数据结构面试题

    1.栈和队列的共同特点是(只允许在端点处插入和删除元素) 4.栈通常采用的两种存储结构是(线性存储结构和链表存储结构) 5.下列关于栈的叙述正确的是(D) A.栈是非线性结构B.栈是一种树状结构C.栈 ...

最新文章

  1. 一致性哈希算法----- 解决memecache 服务器扩容后的数据丢失。
  2. 生成建表脚本up_CreateTable
  3. linux开权限变绿了,解读Linux文件权限的设置方法
  4. mysql007.算数运算.别名.去重.排序
  5. sql server 2008 年累计数_Windows Server 2008 和 SQL Server 2008将终止支持 迁移至Azure 微软提供3年免费技术支持...
  6. spool导出姓名中文乱码_MySQL不同字符集转化标准—7步实现,杜绝乱码!
  7. Redis学习之hget命令
  8. Ruby ERB模板注入检测
  9. Android马甲包
  10. 黑猴子的家:Scala 常用类型
  11. 《图说区块链》读书笔记
  12. RK3399教程:wifi驱动调试技巧
  13. 系统性简述蓝牙以及ESP32对BLE蓝牙的使用(一)
  14. quick-cocos2d-x踩坑记
  15. 《游戏学习》 java经典纸牌类小游戏《斗地主》源码
  16. 如何用js绘制流星雨特效
  17. 游戏美术设计外包哪家比较好
  18. springboot汽车配件销售系统-预约洗车系统java
  19. Flowable-6.6.0 工作流引擎(windows平台zip包)下载
  20. 手撕算法系列之冒泡排序

热门文章

  1. hough变换检测直线 matlab,Hough变换直线检测MatLab代码 | 学步园
  2. 实用主义学python_麻瓜编程《实用主义学Python》课程全集下载地址 – 爱学知识网...
  3. 车牌识别系统论文python_车牌识别系统的设计与实现毕业论文
  4. Python:货币转换(写一个程序进行人民币和美元货币之间的币值转换)
  5. HRM人力资源系统-Day07
  6. C语言程序设计 | 猜数字游戏
  7. zend调试php,Zend Studio使用教程:在Zend Studio中调试PHP(4/5)
  8. 一文读懂OSI七层网络模型与TCP-IP模型和对等网络通信协议
  9. java 三大特性_java的三大特性是什么?
  10. Solidworks教程:利用Simulation模拟热传导