【问题标题】:Container of int *not Integer* type in Java [closed]Java中int *not Integer *类型的容器[关闭]
【发布时间】:2014-11-09 01:48:57
【问题描述】:

我需要有一个容器来存放我在文件上写入的几个整数,但它必须是 int 而不是 Integer 类型,以减少占用的最小字节数(32 位)。我知道ArraylistsVectors 都不会采用 int 那么有没有办法做到这一点?

【问题讨论】:

  • 您的部分问题令人困惑。如果您将这些整数写入文件,如果它们在内存中是 int 或 Integer 类型,有什么区别?
  • 在我看来,您将某事物所占用的 RAM 量与它可以有效容纳的位数混淆了。 Integer 绝对会比 int 占用更多的 RAM,但它仍然只会给你 32 位信息(不计算它是否为空)。当您将该信息传输到文件、byte[]、网络缓冲区或其他任何东西时——不管它占用多少 RAM,重要的是它只有 32 位信息。 Integer 只不过是一个具有一个字段的简单类,即 int value
  • @dili 它们确实占用了不同数量的内存,我再次问:这有什么关系? 在 RAM 中存储这些对象所需的内存量与您选择在文件中存储 32 位值的方式完全没有关系。 所以您需要告诉我们为什么Integer不适用于您,特别是或以其他方式澄清您的问题。另请参阅XY Problems
  • @dili 如果这就是您需要知道的全部内容,那么您实际上并没有阅读我链接到的文档,其中指出 Integer 是一个简单的类,其中一个 int 字段实际上在第一个句子。您不清楚并拒绝自己进行最少量的研究,这浪费了我们所有的时间。
  • @dili 该网站用于辅导。在您自己尝试过某些事情并遇到具体问题后,该站点旨在通过明确的问题陈述来帮助解决具体问题。请参阅 stackoverflow.com/help/how-to-askmeta.stackoverflow.com/questions/261592/…。这个网站上的一个有效问题是,“我正在尝试做 X。当我使用 Integer 而不是 int 时,我遇到了 ABC 问题。我尝试 Y 来解决它无济于事。我该如何解决这个问题?”从您的问题来看,您似乎什么都没尝试。

标签: java integer int containers


【解决方案1】:

如果您写的是“最小压缩大小”,那么当程序对其进行操作时,您的数据占用多少内存并不重要:只在您写出压缩文件时占用多少内存。最初使用盒装的Integers 来操作数据是完全可以的;您只需要在编写文件时进行转换。

【讨论】:

  • 您甚至不必手动转换。我无法想象任何这样的基于int 的代码需要进行任何更改才能与Integer 一起使用。
【解决方案2】:

使用 int 数组,用于存储原始 int 类型数据。

容器意味着对象,它包装原始数据并提供附加功能。因此,对于任何包装的 int 数据,容器实例都将大于 32 位。

【讨论】:

    【解决方案3】:

    有一些集合库支持存储原始值,但它们不是标准 Java 库的一部分。

    通常,您只需要其中之一来满足特定的性能或内存要求。如果您还没有编写程序,那么您可能不需要它们。

    您也可以使用IntBuffer,但这不会为您提供类似集合的界面。相反,这本质上是一个围绕字节缓冲区(或原始字节数组)的轻量级包装器,主要用于读取和写入文件、网络套接字或与本机代码交互。

    【讨论】:

    • 2014 年推荐 PCJ?
    • @leventov 与其说是建议,不如说是一个例子,这个问题已经解决了很长一段时间。如果您有更好的示例,请随时加入。
    【解决方案4】:

    如果您不应该使用简单的 int[],那么您只是“不能”以简单的方式做到这一点..

    int 是原始类型而不是对象(作为整数)

    【讨论】:

      【解决方案5】:
      public class IntContaner {
          public int intOne;
          public int intTwo;
      }
      

      (但是,当然,您使用的任何东西都将占用超过 2x32 位。)

      【讨论】:

      • 这可能是它。但我不能确定整数的数量。它因输入而异。
      • @dili - 那么为什么不是数组呢?
      • 这是一个作业。我不应该在答案中使用数组。但既然没有办法,我不得不重新考虑我猜的整个事情。
      猜你喜欢
      • 2011-09-22
      • 2017-03-27
      • 1970-01-01
      • 2014-11-17
      • 2013-10-07
      • 2011-12-19
      • 1970-01-01
      • 1970-01-01
      • 2018-05-28
      相关资源
      最近更新 更多