java数据结构面试题,java数据结构面试常见问题
如何解决写爬虫IP受阻的问题?立即使用。
常见的数据结构有:HashMap、Hashtable和ConcurrentHashMap。
(相关视频分享:java教学视频)
下面我们分别介绍一下:
HashMap
底层实现:HashMap的底层整体结构是一个数组,数组中的每个元素都是一个链表。每增加一个对象(put),就会生成一个链表对象(object type)。Map中的每个条目都是数组(Map)中的一个元素。Entry是一个键,值),它有一个从当前元素到下一个元素的引用,构成了一个链表。存储原理:在向HsahMap添加元素时,首先计算Key对象的Hash值,得到数组下标。如果数组的位置为空,则插入它;否则,遍历该位置的链表。当一个节点的Key对象和Node对象等于新元素时,该节点的Value对象被新元素的Value对象替换,否则插入新节点。(注意:JDK 8之后,添加了红黑树)
Hashtable
ken 0 @ 166 . com
ConcurrentHashMap
concurrent HashMap是Java中提供的一个线程安全高效的HashMap实现。它采用了非常微妙的分段锁策略,并发HashMap的支柱是段数组。Segment继承自ReentrantLock,是一个可重入锁。每个段是一个子哈希表,段中维护一个哈希表项数组。在并发环境下,操作不同段的数据时,不需要考虑锁竞争。
LinkedHashMap、TreeMap、TreeSet
LinkedHashMap:带顺序访问的HashMap(基于数组和双向链表实现)。Trep:内部排序(基于红黑树实现)。ESET:有序集集合(基于二叉树实现)。
ArrayList、LinkedList、Vector
ArrayList:动态数组(基于数组实现)。LinkedList:有序数组(基于双向链表实现)。Vector:对象容器,可以放不同类的对象(基于数组实现)。
Collection与Collections
集合:集合类的上级接口,其子接口主要有List、Set、Queue等。Collections:为集合提供搜索、排序、替换和线程安全等操作的工具类。(更多相关面试问题推荐:java面试问答)
二叉树
常见二叉树概念
B采油树:参见https://blog.csdn.net/u012102104/article/details/79773362.数据库部分
平衡二叉树(AVL树):每个节点的左右子树深度差的绝对值不超过1。
霍夫曼树:加权路径长度最小的二叉树称为最优二叉树。霍夫曼树的结构不是唯一的,但是所有叶子节点的加权路径长度之和是最小的。
红树:一种自平衡二叉查找树,其特性是:
节点为红色或黑色。根是黑色的。每个叶节点是一个黑色空节点(NIL节点)。每个红色节点的两个子节点是黑色的。从任何节点到它的每个叶子的所有路径都包含相同数量的黑色节点。
二叉树的遍历
//1.优先遍历算法DLR void priority(bintreebt){
如果(bt ) {
访问(Bt-data);
预购(Bt-l child);
预购(Bt-rchild);
}}//2.中序遍历算法LDRvoid Inorder (BinTree bt) {
如果(bt ) {
in order(Bt-l child);
访问(Bt-data);
in order(Bt-rchild);
}}//3.以逆序遍历LRD void post order(bintreebt ){
如果(bt ) {
post order(Bt-l child);
后序(Bt-rchild);
访问(Bt-data);
}}//4.按层次遍历。/*思路:使用队列,先把根(头指针)放入队列,然后如果队列不为空,取队列头元素P,
如果p不为空,则访问它,然后将其左右子树排队,依此类推,直到队列为空。*/void LevelOrder(二叉树bt ) {
//队列被初始化为空
init queue(Q);
//Root到队列中
EnQueue ( Q,Bt);
//如果队列不为空,则继续遍历。
而(!QueueEmpty(Q) ) {
出列(Q,p);
如果(p!=NULL ) {
访问(p-data);
//左右子树排队。
EnQueue ( Q,p-l child);
EnQueue ( Q,p-rchild);
}
} }//二叉树的非递归遍历一般是通过堆栈实现的。相关推荐:java入门
以上是java面试3354的数据结构细节。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。