有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

批编号的Java算法

我有一些不寻常的问题要解决。我需要一些提示或链接开始。我有10个数据槽的队列。一旦队列已满,我需要将其发送到服务器。然而,除了这些数据,我还发送了开始和结束序列号。现在,这个数字必须是唯一的,并且是递增的。因此,对于第一次发送,start=1,end=10。在第二次发送时,它将是start=11,end=20,依此类推。发送队列中的数据后,将从队列中的索引0记录新条目

我如何有效地解决这个问题


共 (1) 个答案

  1. # 1 楼答案

    (你的问题缺少很多背景知识,所以这基本上是在黑暗中拍摄的…)

    由于任何16位数字都可以放入Java int原语中,因此您可以:

    • 通过使用合适的位掩码将Java int转换为16位数字:

      i16 = i32 & 0xffff
      

      警告:此转换有损且不容易可逆

    • 通过保持一个单独的历元int,将16位数字转换为32位int,该历元在每次翻滚时递增一:

      if (previous16 > current16)
          epoch += 1;
      
      current32 = (epoch << 16) | current16;
      

      我不认为它能比Java中的效率更高。更不用说任何可以运行Java的CPU通常都会围绕任何16位处理器运行,除了一些DSP

    几个相关的问题:

    • 注意有符号/无符号转换:Java没有无符号类型,这可能会使事情复杂化,具体取决于您的操作

    • 请注意,根据JLS,所有操作的bytecharshort原语类型都隐式转换为int。当存储在内存中时,它们实际上是否小于32位取决于具体的实现。是的,这使得short类型非常无用