java:数据结构面试题
数据结构是面试一定会问的问题。
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:数据结构面试题相关推荐
- 灵魂拷问!java数据结构面试题
MySQL 数据库最佳学习线路脑图: 一. 对MySQL 的认识 认识Mysql数据库 下载安装MySQL软件 在Linux系统环境下安装MySQL MySOL体系结构与存储引擎 MySQL体系结构 ...
- 从零开始学Java编程!java数据结构面试题
一.Spring Boot 相关 (1)SpringBoot 面试专题 什么是 Spring Boot? Spring Boot 有哪些优点? 什么是 JavaConfig? 如何重新加载 Sprin ...
- 考研英语真题笔记 2020,Java数据结构面试题及答案
They housed(给-房子住) eight adult rats with two types of robotic rat(机械老鼠) - one social(社会的,社交的) and on ...
- Java 程序员必须掌握的 8 道数据结构面试题,你会几道
转载自 Java 程序员必须掌握的 8 道数据结构面试题,你会几道 瑞士计算机科学家Niklaus Wirth在1976年写了一本书,名为<算法+数据结构=编程>. 40多年后,这个等式 ...
- 【100道面试题真题讲解】C++面试题讲解+JAVA面试题讲解+Linux面试题讲解+数据结构面试题+计算机网络面试题 讲解视频-持续更新中
最近找到了一个非常好的公众号:IT笔试面试真题讲解,每天视频分享一道IT公司面试高频题目,完全免费哦,非常适合找工作的学生复习+总结+提炼. 白嫖不敢独吞,分享给大家,也给作者增加一点访问量,鼓励作者 ...
- 数据结构面试题编程题_您下次编程面试时应该了解的顶级数据结构
数据结构面试题编程题 by Fahim ul Haq 通过Fahim ul Haq Niklaus Wirth, a Swiss computer scientist, wrote a book in ...
- 数据结构面试题(史上最全面试题,精心整理100家互联网企业,面试必过)
最全面试题,精心整理100家互联网企业面经,祝你面试成功.面试必过(2023优化版)已发布在个人微信公众号[面向Offer学编程],优化版首先修正了读者反馈的部分答案存在的错误,同时根据最新面试总结, ...
- 常见的数据结构面试题
常见的数据结构面试题,看看你能做出几题来 2007年01月11日 星期四 14:15 1. 在一个单链表中p所指结点之前插入一个s (值为e)所指结点时,可执行如下操作: q=head; ...
- c++数据结构面试题(附答案)
c++数据结构面试题(附答案) 1.设一组初始关键字记录关键字为(20,15,14,18,21,36,40,10),则一轮冒泡排序结束后的结果为? 答案: 升序:15,14,18,20,21,36,1 ...
- java机试 数据结构_Java数据结构面试题
1.栈和队列的共同特点是(只允许在端点处插入和删除元素) 4.栈通常采用的两种存储结构是(线性存储结构和链表存储结构) 5.下列关于栈的叙述正确的是(D) A.栈是非线性结构B.栈是一种树状结构C.栈 ...
最新文章
- 一致性哈希算法----- 解决memecache 服务器扩容后的数据丢失。
- 生成建表脚本up_CreateTable
- linux开权限变绿了,解读Linux文件权限的设置方法
- mysql007.算数运算.别名.去重.排序
- sql server 2008 年累计数_Windows Server 2008 和 SQL Server 2008将终止支持 迁移至Azure 微软提供3年免费技术支持...
- spool导出姓名中文乱码_MySQL不同字符集转化标准—7步实现,杜绝乱码!
- Redis学习之hget命令
- Ruby ERB模板注入检测
- Android马甲包
- 黑猴子的家:Scala 常用类型
- 《图说区块链》读书笔记
- RK3399教程:wifi驱动调试技巧
- 系统性简述蓝牙以及ESP32对BLE蓝牙的使用(一)
- quick-cocos2d-x踩坑记
- 《游戏学习》 java经典纸牌类小游戏《斗地主》源码
- 如何用js绘制流星雨特效
- 游戏美术设计外包哪家比较好
- springboot汽车配件销售系统-预约洗车系统java
- Flowable-6.6.0 工作流引擎(windows平台zip包)下载
- 手撕算法系列之冒泡排序
热门文章
- hough变换检测直线 matlab,Hough变换直线检测MatLab代码 | 学步园
- 实用主义学python_麻瓜编程《实用主义学Python》课程全集下载地址 – 爱学知识网...
- 车牌识别系统论文python_车牌识别系统的设计与实现毕业论文
- Python:货币转换(写一个程序进行人民币和美元货币之间的币值转换)
- HRM人力资源系统-Day07
- C语言程序设计 | 猜数字游戏
- zend调试php,Zend Studio使用教程:在Zend Studio中调试PHP(4/5)
- 一文读懂OSI七层网络模型与TCP-IP模型和对等网络通信协议
- java 三大特性_java的三大特性是什么?
- Solidworks教程:利用Simulation模拟热传导