0

所以问题是关于代码的优化。我有一张退休日期表,我将在下面列出

 Year of Birth                              Full Retirement Age
 1937 or earlier.............................65
 1938........................................65 years 2 months
 1939........................................65-4
 1934.......................................65-6
 .
 .
 .and the list is a long list

我想要做的是将此表存储在列表对象或其他东西中,以便我可以在方法和列表对象中传递出生年份并取回相应的退休年龄。我不想在我的代码中有很多 If 和 Else 语句,因为列表太大了,代码会很混乱。

这个问题有什么可能的解决方案?提前致谢

4

6 回答 6

1

尝试使用地图而不是列表。以出生年份为key,可以直接从map中获取关联值。

于 2013-05-02T15:52:35.087 回答
0

您可以使用地图,但有可能出现重复键。

同一年可以出生两个人。

采用MultiMap

可以保存重复键值对并维护给定键值的插入顺序的Multimap 有关所有多图的通用信息,请参阅多图文档。

于 2013-05-02T15:52:51.870 回答
0

使用地图。Map 是一个 List 对象,带有Key:Value.

Map<String, Object> map = new HashMap<String, Object>();
map.put('1937', 65);
...

要浏览地图,您可以使用以下命令:

for (String key : map.keySet()) {
    System.out.println(map.get(key));
}

您可以根据需要更改值<String, Object>(整数,日期......或其他)。始终遵循相同的顺序<KeyType, ValueType>

于 2013-05-02T15:55:10.377 回答
0

将您的列表/表存储到 HashMap ...然后从您的方法中检索,例如:

public String getRetirementAge(String yearOfBirth) {
    return yourMap.get(yearOfBirth);

}
于 2013-05-02T15:56:15.613 回答
0

如果您每年都有数据,我会使用 java 地图 http://docs.oracle.com/javase/tutorial/collections/interfaces/map.html,其中键是年份,值是退休值。
这会给你一个 O(1)

如果您有稀疏数据并且您必须以某种方式计算最近的年份,您可以使用排序列表并使用二进制搜索,它会为您提供 O(logn) 甚至使用 B-tree。

BR,大卫

于 2013-05-02T15:57:45.203 回答
0

我建议您将此信息存储在数据库中,特别是如果列表是一个很长的列表(您说它是)。使用数据库会有很多优化。一方面,您不必将那个巨大的列表存储在内存中。另一方面,对数据的 SQL 查询通常比代码中的数据结构快得多。Martin Fowler 在http://www.martinfowler.com/articles/dblogic.html上有一篇关于此的(诚然旧的)文章。将其放入数据库的另一件事是,这是可能更改的列表类型。他们已经在谈论调整退休年龄以节省社会保障。更新数据库中的数据比编辑代码和重新编译/重新部署要容易得多。

您使用的数据库类型可以是 NoSQL 或关系、嵌入式或在线。这个决定我会留给你。如果由于其他原因已经有可供此应用程序使用的数据库,这对您来说将是一个奖励。

于 2013-05-02T15:59:36.380 回答