【问题标题】:How to efficiently locally store instances of an object in Java如何在 Java 中有效地在本地存储对象的实例
【发布时间】:2021-09-24 01:29:32
【问题描述】:

我是 Java 的初学者。我有一个大学项目,我们被要求建立一个火车预订系统(桌面)。作为应用程序的一部分,管理员可以添加和编辑新路线。我想将这些不同路线的实例存储在某处,但是如何?我希望能够添加任意数量的内容,但列表和数组需要确定大小。 如何有效地存储对象的无限实例?这是我要为每个实例存储的数据:

int routeId;
String deptPoint;
String destPoint;
String transpMode;
int vehicleId;

注意:我们必须使用 Java 数据类型,不允许使用 DB。

我们将不胜感激!谢谢:)

【问题讨论】:

  • 使用List 有什么问题?与数组不同,它们没有固定大小。
  • '我怎样才能有效地存储对象的无限实例' -> 你不能。总会有一个限制。
  • @Stultuske 会有空间等限制,但我认为 OP 指的是 java 代码,不限制存储的对象数量
  • 大家好!如果可能的话,我想让它能够持续存在,如果没有,我会设置一个限制。我一直在做一些研究,我发现我可以用 ArrayList 做到这一点,这行得通吗?
  • 一种天真的方法是将它们存储在文本文件中,可能是 JSON 或 XML 格式。甚至一些数据库也会这样做,但如果您自己创建存储机制,您将不会使用数据库;-)

标签: java arrays object


【解决方案1】:

事实上,Java 列表不需要预先确定大小,它们会随着您添加和删除元素而改变,因此它们非常适合存储 Java 对象。您没有提到的是您是否需要坚持它,如果您不需要,那么您可以这样做。如果需要,您将需要数据库或将其存储到您机器上的文件中。

【讨论】:

  • 说他们不允许使用数据库,我想我们可以假设他提到不涉及持久性
  • @Stultuske 我不确定你是否可以假设,它们完全可以要求在磁盘上持久化
  • @Filip 这是一个大学项目。你能想象一所大学说“你必须坚持它,但不允许使用数据库”?特别是对于那些不知道怎么做的人?
  • 是的,我可以,还有其他选项不包括数据库。不知道这个 cmets 有什么意义。编辑:那家伙刚刚说他想坚持下去。
【解决方案2】:

但列表和数组需要确定大小。

不正确。数组有固定的大小,但没有列表。 List 实现(如果可变)支持自动动态调整大小,最大限制为 20 亿个项目或内存不足。

定义你的类。这里我们使用Java中的records特性 16+ 为简洁起见。但如果您需要可变对象,请改为声明一个常规类。

record Route( int routeId, String deptPoint, String destPoint, String transpMode, int vehicleId ) {}

声明一个列表来保存该类的对象。

List< Route > routes = new ArrayList<> () ;

实例化Route 对象并收集。

routes.add( new Route( … ) ) ;

【讨论】:

  • 请注意,对于大学项目,Java 16 可能不可用,并且讲师可能从未听说过 Java 记录。
  • @chrylis-cautiouslyoptimistic-- 我同意你的观点,对于一个大学项目,Java 16 可能不可用,而且讲师可能从未听说过 Java 记录,但我们应该记住,发布在 SO 上的答案也应该对页面的未来访问者有用。今天,Java 16 可能并不常见,但当有人在几年后登陆此页面时,这对他/她来说将是一个有用的答案。
【解决方案3】:

您可以构建一个具有此字段的对象并将其放入List

public class Route {
  int routeId;
  String deptPoint;
  String destPoint;
  String transpMode;
  int vehicleId;
}

正如deHaar 建议的那样,一种选择是将您的值存储在 JSON 格式的文本文件中。您可以使用 gson 非常容易地转换为 JSON 或从 JSON 转换。然后,您只需按照this 示例实现将这个 JSON 存储在本地文件中的机制。

【讨论】:

    猜你喜欢
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 2021-07-18
    相关资源
    最近更新 更多