文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

java队列实现方法(顺序队列,链式队列,循环队列)

2023-05-30 17:43

关注

双向顺序队列ArrayDeque和双向链式队列LinkedList,JDK已经包含,在此略。ArrayDeque包括顺序栈和顺序队列,LinkedList包含链式栈和链式队列。ArrayDeque和LinkedList都是线程不安全的。PriorityQueue优先队列也在JDK。

1.顺序队列的实现

package lang;import java.io.Serializable;import java.util.Arrays;public class ArrayQueue<T> implements Serializable{  private static final long serialVersionUID = 7333344126529379197L; private int DEFAULT_SIZE = 10; private int capacity;//保存数组的长度 private Object[] elementData;//定义一个数组用于保存顺序队列的元素 private int front = 0;//队头 private int rear = 0;//队尾 //以默认数组长度创建空顺序队列 public ArrayQueue() {  capacity = DEFAULT_SIZE;  elementData = new Object[capacity]; } //以一个初始化元素来创建顺序队列 public ArrayQueue(T element) {  this();  elementData[0] = element;  rear++; }  public ArrayQueue(int initSize) {  elementData = new Object[initSize]; }  public ArrayQueue(T element, int initSize) {  this.capacity = initSize;  elementData = new Object[capacity];  elementData[0] = element;  rear++; }  public int size() {  return rear - front; }  public void offer(T element) {  ensureCapacity(rear + 1);  elementData[rear++] = element; }  private void ensureCapacity(int minCapacity) {  //如果数组的原有长度小于目前所需的长度  int oldCapacity = elementData.length;  if (minCapacity > oldCapacity) {   int newCapacity = (oldCapacity * 3) / 2 + 1;   if (newCapacity < minCapacity)    newCapacity = minCapacity;   // minCapacity is usually close to size, so this is a win:   elementData = Arrays.copyOf(elementData, newCapacity);  } }  public T poll() {  if (isEmpty()) {   throw new IndexOutOfBoundsException("空队列异常");  }  //保留队列的front端的元素的值  T oldValue = (T) elementData[front];  //释放队列的front端的元素  elementData[front++] = null;  return oldValue; }  public T peek() {  if (isEmpty()) {   throw new IndexOutOfBoundsException("空队列异常");  }  return (T) elementData[front]; }  public boolean isEmpty() {  return rear == front; }  public void clear() {  //将底层数组所有元素赋为null  Arrays.fill(elementData, null);  front = 0;  rear = 0; } public String toString() {  if (isEmpty()) {   return "[]";  } else {   StringBuilder sb = new StringBuilder("[");   for (int i = front; i < rear; i++) {    sb.append(elementData[i].toString() + ", ");   }   int len = sb.length();   return sb.delete(len - 2, len).append("]").toString();  } }}

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯