最全玩转数据结构之【Java】手写循环队列【数组模拟】,腾讯、美团Java面试经验分享

Kafka进阶篇知识点

image

Kafka高级篇知识点

image

44个Kafka知识点(基础+进阶+高级)解析如下

image

由于篇幅有限,小编已将上面介绍的**《Kafka源码解析与实战》、Kafka面试专题解析、复习学习必备44个Kafka知识点(基础+进阶+高级)都整理成册,全部都是PDF文档**

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

=======================================================================

在这里插入图片描述

那么为什么要空出来一个位置呢?


  • 答:是因为如果不这样的话,队列空时的条件是:front == tail,而队列满是的条件还是: front == tail,这样会产生歧义。

  • 空出一个位置之后,两者的条件就不会产生歧义了:

  • 队列空的条件:front == tail

  • 队列满的条件:front == (tail + 1)% N;(N:数组的长度)

  • 注意:%N这是循环队列的精髓所在的地方,当tail到尾部没位置的时候,可以将元素添加到前面空闲的位置上。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6HyKCIrv-1640873720949)(循环队列.assets/image-20211230221345198.png)]

具体代码的实现:


package Queue;

// 循环队列

public class LoopQueue implements Myqueue {

private E[] data;

private int front, tail;

private int size;

public LoopQueue(int capacity) {

data = (E[])new Object[capacity + 1];

front = 0;

tail = 0;

size = 0;

}

public LoopQueue() {

this(10);

}

// 空闲下来一个位置,防止队列满和队列空的判断条件相同而产生歧义。

public int getCapacity() {

return data.length - 1;

}

@Override

public boolean isEmpty() {

return front == tail;

}

@Override

public int getSize() {

return size;

}

// 入队操作

@Override

public void enqueue(E e) {

// 若队列满了,则扩容两倍

if ((tail + 1) % data.length == front) {

resize(getCapacity() * 2);

}

data[tail] = e;

tail = (tail + 1) % data.length;

size ++ ;

}

// 扩容函数

private void resize(int newCapacity) {

// + 1 是因为要空闲一个位置,所以要 + 1才能装下newCapacity个元素

E[] newData = (E[])new Object[newCapacity + 1];

for (int i = 0; i < size; i ++ ) {

// 将front放到新组的头部

newData[i] = data[(i + front) % data.length];

}

总结

虽然我个人也经常自嘲,十年之后要去成为外卖专员,但实际上依靠自身的努力,是能够减少三十五岁之后的焦虑的,毕竟好的架构师并不多。

架构师,是我们大部分技术人的职业目标,一名好的架构师来源于机遇(公司)、个人努力(吃得苦、肯钻研)、天分(真的热爱)的三者协作的结果,实践+机遇+努力才能助你成为优秀的架构师。

如果你也想成为一名好的架构师,那或许这份Java成长笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

需要这份系统化的资料的朋友,可以点击这里获取

  • 18
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值