gpt4 book ai didi

java - 运行时创建内存高效常量的技术

转载 作者:行者123 更新时间:2023-12-01 22:22:48 24 4
gpt4 key购买 nike

目前,我的应用程序中有以下设计,它使用 enum 作为内存高效常量

public enum Board {
Toronto // Toronto stock Exchange
}

public class Stock {
private final Board board;
private final Code code;
....
}

这是一种有效的内存方式。例如,如果证券交易所中有数千个 Stock,则只会创建 1 个 Board 实例。

Stock stock0 = new Stock(Code.newInstance("AAA.TO"), Board.Toronto);
Stock stock1 = new Stock(Code.newInstance("AAB.TO"), Board.Toronto);

但是,这肯定有一些缺点。证券交易所会不时推出新板。当这样的事件发生时,我需要

  • 在枚举Board中添加新成员
  • 编译应用并将其重新部署给用户
<小时/>
public enum Board {
Toronto, // Toronto stock Exchange
TSXV // New Toronto venture
}

Stock stock0 = new Stock(Code.newInstance("AAA.TO"), Board.Toronto);
Stock stock1 = new Stock(Code.newInstance("AAB.TO"), Board.Toronto);
Stock stock2 = new Stock(Code.newInstance("TRU.V"), Board.TSXV);

我想避免这种不便。我最初的计划是

public class Board {
private final String board;
private Board(String board) {
this.board = board;
}
public Board newInstance(String board) {
return new Board(board);
}
}

但是,这不是一种有效的内存方式。因此,将创建 Board 的多个实例。

// 2 Toronto board instance will be created! Not memory efficient when we have huge stock list.
Stock stock0 = new Stock(Code.newInstance("AAA.TO"), Board.newInstance("Toronto"));
Stock stock1 = new Stock(Code.newInstance("AAB.TO"), Board.newInstance("Toronto"));
Stock stock2 = new Stock(Code.newInstance("TRU.V"), Board.newInstance("TSXV"));

我想知道,我可以应用什么样的数据结构,以便我可以有一种内存有效的方式来表示常量(在我的上下文中,它意味着 Board 类)

我不喜欢使用 String,因为我更喜欢类型安全,以区分 Board 和真正的 String

最佳答案

嗯,将棋盘存储在集合或 map 中怎么样?这样您就可以确保每个实例只有一个实例。

伪代码:

public class Board {
private static final Set<Board> boards = new HashSet<>();

public static Board getInstance(String board) {
//search if board already exists on boards set, if it is, return that instance; else, add to list and return the newly created instance.
}
//override equals and hashCode appropriately
}

关于java - 运行时创建内存高效常量的技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29404648/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com