【问题标题】:Java String Computation : Need Best Optimized solutionJava 字符串计算:需要最佳优化的解决方案
【发布时间】:2015-10-12 10:01:18
【问题描述】:

需要您对操作和递增字符串的最佳解决方案提出意见。

系统具有类似于“RE”、“MA”(系统定义)或任何用户定义的代码,这些代码将被多个实体使用。每个实体都需要关联唯一的代码;为此,我们需要在系统定义的代码后面加上序列号。

  • RE1
  • 随机字符串
  • RE2
  • RE3
  • 随机字符串
  • RE4
  • MA1
  • RE5
  • MA2

例如考虑银行账户。假设所有帐户都与一个代码相关联。但特别是支票账户和现金账户代码需要分别采用 RE* 和 MA* 格式。

  • 支票账户1 --> RE1
  • 支票账户2 --> RE2
  • 现金账户 1 --> MA1
  • 现金账户 2 --> MA2
  • 信用卡账户 --> 随机字符串

现在,每当我们添加新实体时,我们都需要根据类型确定要使用的下一个序列。在 Java 中解决这个问题的最佳方法是什么?

【问题讨论】:

  • 维护一个计数器有帮助吗?
  • 它不会因为每次系统上线时都必须初始化此计数器。此外,由于可以生成此代码的多个流程,引入同步可能有点麻烦
  • 在这种情况下,我将获取数组中的最后一项并获取索引?
  • “数组”的目的是什么?您有一个或多个代码,例如“RE”,每个代码用于某个实体,还有一个计数器指示最后一个实际使用的代码。所以你有一个Map<String,Integer> Serialize on shutdown 等等。一切都很简单。
  • 更新了我的 qsn,因为没有固定的字符串。代码可以是任何字符串,具体取决于要与之关联的实体类型。

标签: java arrays string algorithm data-structures


【解决方案1】:

不要为此使用数组。使用地图。

Map<String, Index> prefixes = new HashMap<>();
prefixes.put("RE", 0 /* or whatever appropriate initial value */);
prefixes.put("MA", 0);

现在,每当您创建一个新实体时,只需这样做:

int nextIndex = prefixes.get("RE") + 1;
String value = "RE" + nextIndex;
prefixes.put("RE", nextIndex);

【讨论】:

  • 这需要在应用程序启动时初始化此映射。为此,我们需要遍历所有代码以确定要使用的下一个序列
  • 是的,你必须确定初始值。因此,要么在启动时迭代一次以初始化映射,要么每次迭代以确定序列的下一个值。
猜你喜欢
  • 2021-04-28
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
  • 2018-04-06
  • 2023-03-19
  • 2016-11-14
  • 1970-01-01
相关资源
最近更新 更多