使用循环数组实现队列:调整循环数组大小的最佳方法是什么?

2024-01-10

我正在实施一个使用循环数组进行队列,我有点陷入困境resize()方法实现(当数组已满时)。

在 - 的里面enqueue()方法我检查数组的大小是否等于它的长度,并获取它是否已满。现在,我不再抛出异常,而是尝试调整数组的大小。

问题是,我有两种情况要考虑

哪一个是复制元素的最佳方法将旧数组放入更大的新数组中?

我认为它使用 for 循环,例如:

newArray = new Array[oldArray.length*2];

if (front <= rear) {
    for (int i = front; i < rear; i++) {
        newArray[i] = oldArray[i];
    } 
} else {
    for (int i = front; i < newArray.length; i++) {
        newArray[i] = oldArray[i];
    }

    for (int j = rear; j < front; j++) {
        // i'm using the variable i, the order is maintained
        newArray[i] = oldArray[j];
        i++;
    }
}

Then oldArray = newArray, 返回newArray并完成调整大小

我不确定用于执行此操作的 for 数量,我担心我会丢失值。

有人可以告诉我是否有更好的方法来做到这一点?


要复制包含多个元素的数组,请使用系统.arraycopy() http://download.oracle.com/javase/6/docs/api/java/lang/System.html#arraycopy%28java.lang.Object,%20int,%20java.lang.Object,%20int,%20int%29,因为它通常作为本机代码实现,例如Sun 的VM 使用手工编码的汇编程序。

前 > 后

由于数据是连续的,因此它可以保留在新数组中的同一位置。

System.arraycopy(oldArray, front, newArray, front, front-rear);

数据是不连续的,因此将两个块复制到新数组的开头。

// copy [rear to end]
System.arraycopy(oldArray, rear, newArray, 0, oldArray.length-rear);
// copy [0 to front]
System.arraycopy(oldArray, 0, newArray, oldArray.length-rear, front);
front = oldArray.length-(rear-front);
rear = 0;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用循环数组实现队列:调整循环数组大小的最佳方法是什么? 的相关文章

  • 使用 Exec Maven 插件分叉 Java,而不使用“exec”目标

    来自文档 https www mojohaus org exec maven plugin exec exec在单独的进程中执行程序和Java程序 exec java在同一虚拟机中执行 Java 程序 我想 fork 一个 java 程序
  • 我对线程失去了理智

    我想要这个类的对象 public class Chromosome implements Runnable Comparable
  • 计算字符串中的唯一单词

    下面我尝试将字符串数组提供给一个函数 该函数将唯一单词添加到单词数组中 并且如果该单词已经在数组中 则增加计数数组中相应元素的计数 var words var counts calculate a b calculate a c funct
  • 如何将 numpy rearray 的子集转换为连续数组?

    我有一个recarray来自读取 csv 文件 我有兴趣将列的子集转换为连续浮点数组 我想避免将它们转换为列表或将它们一一堆叠 我尝试了中的建议https stackoverflow com a 11792956 https stackov
  • 如何使用 Java 引用释放 Java Unsafe 内存?

    Java Unsafe 类允许您按如下方式为对象分配内存 但是使用此方法在完成后如何释放分配的内存 因为它不提供内存地址 Field f Unsafe class getDeclaredField theUnsafe Internal re
  • ThreeTen 向后移植与 JSR-310 的比较

    由于某些原因 我们现在无法使用 java 8 我们仍然停留在 java 7 上 不过 我想使用新的JSR 310 date time APIs现在 使用官方向后移植 ThreeTen http www threeten org threet
  • 在 Spring 中为 @Pathvariable 添加类级别验证

    在发布这个问题之前 我已经做了很多研究并尝试了很多可用的解决方案 这是我陷入的棘手情况 我有一个 Spring 控制器 它有多个请求映射 它们都有 PathVariables 控制器如下所示 Controller EnableWebMvc
  • 2^31 次方的 Java 指数错误 [重复]

    这个问题在这里已经有答案了 我正在编写一个java程序来输出2的指数幂 顺便说一句 我不能使用Math pow 但是在 2 31 和 2 32 处我得到了其他东西 另外 我不打算接受负整数 My code class PrintPowers
  • 如何更改 Swagger-ui URL 前缀?

    我正在使用 Springfox Swagger2 和 Spring boot 1 5 9 我可以通过此链接访问 swagger UI http localhost 8090 swagger ui html http localhost 80
  • 如何在 IntelliJ IDEA 中运行 akka actor

    来自 Akka 网站文档 然后 这个主要方法将创建所需的基础设施 运行演员 启动给定的主要演员并安排 一旦主要参与者终止 整个应用程序就会关闭 因此 您将能够使用类似于以下的命令运行上面的代码 下列的 java classpath akka
  • UseCompressedOops JVM 标志有什么作用以及何时应该使用它?

    HotSpot JVM 标志是什么 XX UseCompressedOops我应该做什么以及什么时候使用它 在 64 位 Java 实例上使用它 与不使用它 时 我会看到什么样的性能和内存使用差异 去年大多数 HotSpot JVM 都默认
  • 类更改(例如字段添加或删除)是否保持 Serialized 的向后兼容性?

    我有一个关于 Java 序列化的问题 在这种情况下 您可能需要修改可序列化类并保持向后兼容性 我有丰富的 C 经验 所以请允许我将 Java 与 NET 进行比较 在我的Java场景中 我需要使用Java的运行时序列化机制序列化一个对象 并
  • Joshua Bloch 的构建器设计模式有何改进?

    早在 2007 年 我就读过一篇关于 Joshua Blochs 所采用的 构建器模式 的文章 以及如何修改它以改善构造函数和 setter 的过度使用 特别是当对象具有大量属性 其中大部分属性是可选的 时 本文对此设计模式进行了简要总结
  • 如何向页面添加 HTML 页眉和页脚?

    如何使用 itext 从 html 源添加标题到 pdf 目前 我们已经扩展了 PdfPageEventHelper 并重写了这些方法 工作正常 但当我到达 2 个以上页面时 它会抛出 RuntimeWorkerException Over
  • 文本视图不显示全文

    我正在使用 TableLayout 和 TableRow 创建一个简单的布局 其中包含两个 TextView 这是代码的一部分
  • 我们如何使用 thymeleaf 绑定对象列表的列表

    我有一个表单 用户可以在其中添加任意数量的内容表对象这也可以包含他想要的列对象 就像在 SQL 中构建表一样 我尝试了下面的代码 但没有任何效果 并且当我尝试绑定两个列表时 表单不再出现 控制器 ModelAttribute page pu
  • Azure Java SDK:ServiceException:ForbiddenError:

    尝试了基本位置检索器代码 如下所示 String uri https management core windows net String subscriptionId XXXXXXXX 5fad XXXXXX 9dfa XXXXXX St
  • 确定 JavaFX 中是否消耗了事件

    我正在尝试使用 JavaFX 中的事件处理来做一些非滑雪道的事情 我需要能够确定手动触发事件后是否已消耗该事件 在以下示例中 正确接收了合成鼠标事件 但调用 Consumer 不会更新该事件 我对此进行了调试 发现 JavaFX 实际上创建
  • 带 getClassLoader 和不带 getClassLoader 的 getResourceAsStream 有什么区别?

    我想知道以下两者之间的区别 MyClass class getClassLoader getResourceAsStream path to my properties and MyClass class getResourceAsStre
  • 在会话即将到期之前调用方法

    我的网络应用程序有登录的用户 有一个超时 在会话过期之前 我想执行一个方法来清理一些锁 我已经实现了sessionListener但一旦我到达public void sessionDestroyed HttpSessionEvent eve

随机推荐

  • Django + Google SSO openid

    我想要我的申请http app acquee com designer http app acquee com designer接受谷歌帐户作为登录 我找到了一堆 django 库 但大多数都是在我不使用的现有 Django 身份验证系统之
  • Django 开发服务器消息 - 它们是什么意思?

    如果我运行 Django 开发服务器并在浏览器中查看我的应用程序 我会收到如下消息 08 一月 2011 18 12 45 获取 HTTP 1 1 200 2714 08 一月 2011 18 12 45 获取 static style c
  • 嵌套列表:对列表中每个子元素的不同元素应用不同的函数

    我必须加载两种类型的数据集 使用不同的函数进行处理 然后连接在一起 我有每种类型的多个数据集 它们的名称存储在嵌套列表中 我想将两个不同的函数 或一个标识嵌套列表中每个数据集的函数 应用于嵌套列表中的每个子元素 我尝试了 lapply sa
  • Java中的动态ArrayList

    我对java有一个疑问 我们可以创建动态的吗 ArrayList or String 在 for 循环内 例如 在我的应用程序中 有类别字段 不是静态的 从服务器获取 我想创建ArrayList or String 基于类别大小的对象 如何
  • 允许任何语言的字母(如“ñ”)的正则表达式

    尝试让用户使用其他语言 例如西班牙语或法语 中的特殊字符 我原来有这个 A Za z0 9 i 然后将其更改为 p L p N i 但仍然不起作用 应允许使用诸如 之类的字母 谢谢 修订 我发现在开头加上 UTF8 有助于解决问题 所以我使
  • Nodejs 可以与 Cakephp 集成吗?

    我想实时监控用户输入的数据comments桌子 我有一个 Apache 服务器正在运行 并且假设它在端口 1337 上有一个节点服务器 每次有人保存新数据时 我该怎么做 例如返回表中的总行数comment并显示在view 也许方法是使 th
  • 自动展开PropertyGrid中的一些属性

    我想通过使用该类的属性来自动展开加载了我的 SettingsStructure 类的实例的 PropertyGrid 中的一些节点 另外 如果用户在 PropertyGrid 上再次加载该实例 我试图让实例 记住 每个属性是否已展开 我做了
  • 在SQL中显示表的结构

    有人可以向我更好地解释一下吗 如何显示表的结构 我运行select from table 当然它会显示表中的所有内容 但是 我被要求显示表的结构 这是什么意思 命令是什么 这是我的下表 SQL gt select from dept DEP
  • 我应该在 Python 中使用“公共”属性还是“公共”属性?

    在 Python 中 我有以下示例类 class Foo self attr 0 property def attr self return self attr attr setter def attr self value self at
  • 从 data.table 聚合返回多列[重复]

    这个问题在这里已经有答案了 我想用data table作为替代aggregate or ddply 因为这两种方法没有像希望的那样有效地扩展到大型对象 不幸的是 我还没有弄清楚如何让向量返回聚合函数在结果中生成多列data table 例如
  • Bootstrap 3:嵌套选项卡

    我试图将一个选项卡放在一个选项卡内 但是每当我单击内部嵌套选项卡时 整个内部嵌套选项卡行就会消失 这是 jsfiddle 中的示例 http jsfiddle net jNWMY 1 http jsfiddle net jNWMY 1 尝试
  • 创建原始数据包来欺骗 UDP 数据包

    我正在寻找使用 Java 欺骗 UDP 数据包 有没有好的 Java 库可以让您创建自己的原始套接字 我会使用一个 Java API 来包装libpcap http www tcpdump org libpcap 有一个 注入 功能 允许您
  • 如何不在nginx访问日志中记录get请求参数?

    我需要启用访问日志 但出于合规性原因 无法在访问日志中记录敏感 GET 请求参数的数据 虽然我知道 我可以解析日志 事后 并清理它们 但这不是一个可接受的解决方案 因为出于合规性原因 日志不能被篡改 如何防止 sensitive data
  • 正则表达式匹配除某些之外的所有集合

    我确定以前曾问过这个问题 但我似乎找不到它 或知道要搜索的正确措辞 基本上我想要一个匹配除连字符之外的所有非字母数字的正则表达式 所以基本上匹配 W 除了排除 我不知道如何从预制集中排除特定的 W是一个简写 w So w 一些背景知识 定义
  • 识别批处理文件的运行实例

    这些对我不起作用 有什么帮助可以明确纠正以下四个示例吗 即使我打开了三个 CMD exe EXAMPLE01 也只是回显 继续 示例 01 echo off wmic process where name cmd exe find cmd
  • 依赖于自身的 Spark 窗口函数

    假设我在 DataFrame 中有一列已排序的时间戳 我想编写一个函数 向该 DataFrame 添加一列 根据以下规则将时间戳切割成连续的时间片 从第一行开始并继续迭代到最后 对于每一行 如果您在当前组中走了 n 行 或者您在当前组中走了
  • 获取从星期日开始的周数

    我目前有这样的代码 我可以通过添加和减去按钮获取周数以及该周的开始 结束日 Date prototype getWeekNumber function var d new Date Date UTC this getFullYear thi
  • Razor:条件语句中的 标记引发错误

    if Model Property null
  • Jenkins“仅在构建成功时才运行”对于不成功的构建仍然运行

    我正在使用 Jenkins 进行持续集成 并且我有一些具有上游和下游构建连接的项目 我已选择Run only if build succeeds在每个项目的配置中 然而 构建后步骤仍然会因不稳定的构建而被触发 詹金斯版本是 1 480 3
  • 使用循环数组实现队列:调整循环数组大小的最佳方法是什么?

    我正在实施一个使用循环数组进行队列 我有点陷入困境resize 方法实现 当数组已满时 在 的里面enqueue 方法我检查数组的大小是否等于它的长度 并获取它是否已满 现在 我不再抛出异常 而是尝试调整数组的大小 问题是 我有两种情况要考