【发布时间】:2019-01-01 04:00:39
【问题描述】:
我正在开发一个程序,该程序授权服务器用户使用生成的密钥访问它,我目前正在研究生成部分。服务器的所有者可以指定密钥的数量、服务器 ID 和密钥的持续时间。我需要存储并检查密钥是否与 serverID 匹配,以便用户可以使用密钥获得访问权限。
我唯一能想到的是一个复杂的 HashMap 组合,其中包含另一个 HashMap,在该 HashMap 中包含一个 List。第一个 String 是每个服务器唯一的服务器 ID,List 是生成的一批密钥,最终的 String 值是这些密钥的持续时间。
static HashMap<List<String>, String> keyTimeBundle = new HashMap<>();
static List<String> generatedKeys = new ArrayList<>();
static HashMap<String, HashMap<List<String>, String>> clientGeneratedKeys = new HashMap<>();
问题是,在检查密钥是否与匹配的服务器 ID 匹配时,我不知道从哪里开始,因为密钥位于 List 内的另一个 HashMap 中。我确信还有另一种更简单的方法来实现它,但我还没有想到它,所以请随意不使用我的方法来解释如何存储和检查值。
【问题讨论】:
-
答案是编写自己的对象,而不是构建这些(有些荒谬的)数据结构。
-
您正在尝试使用列表和地图创建复杂的结构。我认为最好的解决方案是创建对象来表示您需要的数据。创建一个对象服务器来存储服务器,其中包含一个密钥列表。对象 Key 可以具有生成的密钥和持续时间。这将使您的代码更易于理解。
-
虽然它可以/应该稍微简化为
Map<String, Map<List<String>, String>>,但您绝对应该使用您需要的方法定义一个合适的interface。请注意,使用List<String>作为地图的 key 看起来特别可疑。我很难想象有一种合理的方式在那里进行查找。
标签: java list arraylist hashmap keyvaluepair