Java 需要帮助存储/检索数据吗
用户有一个数字数组列表。这些数字对应于他们可以访问的应用程序。某些申请有不同的权利编号(即-3、72等)。我想做的是将这些数据存储在地图中,这样当用户登录时,他们可以在地图中输入自己的号码,并快速获得他们有权使用的应用程序。但是,有些申请需要2到3个权利编号。例如,一个条目可以是:(“101和234”,“应用程序1”)。我想知道是否有一种理想的方法可以从地图中检索用户所满意的所有值 在我目前的情况下,该程序将用户数据与每个应用程序进行比较,并确认或拒绝访问。这似乎效率低下。非常感谢您对我们的任何帮助Java 需要帮助存储/检索数据吗,java,data-structures,Java,Data Structures,用户有一个数字数组列表。这些数字对应于他们可以访问的应用程序。某些申请有不同的权利编号(即-3、72等)。我想做的是将这些数据存储在地图中,这样当用户登录时,他们可以在地图中输入自己的号码,并快速获得他们有权使用的应用程序。但是,有些申请需要2到3个权利编号。例如,一个条目可以是:(“101和234”,“应用程序1”)。我想知道是否有一种理想的方法可以从地图中检索用户所满意的所有值 在我目前的情况下,该程序将用户数据与每个应用程序进行比较,并确认或拒绝访问。这似乎效率低下。非常感谢您对我们的任何
注意:我正在从XML中读取应用程序及其数字,因此我可以根据自己的意愿存储它们。如果每个应用程序需要大量数字,最好的方法是使用集合交集。如果数字是连续的或至少是密集的,则可以将其优化为一个位集。不过,对于一个或两个数字,我建议只单独测试每个数字,因为它可能比全套操作更快。解决方案:
- 为每个应用程序定义一个类(我们称之为
)。该类包含应用程序的名称和(排序的)权利列表/数组App
- 使用映射从字符串映射到
:App
用于所有单一授权应用(您可以使用Map
或HashMap
-您的选择)。如果有多个应用程序只需要一个和相同的权限,请考虑<代码> map < /代码>。从地图中排除需要多个权限的应用,并将其存储在单独的列表/数组中TreeMap
- 当你得到一个有权检索应用程序的列表时,在列表中循环,只需抓取
映射字符串映射到的所有内容即可。对于需要多个权限的用户,只需逐个检查(您可以通过对给定权限列表进行排序,并将权限按排序顺序存储到每个
,从而加快检查速度,但这可能并不重要,因为大小很小)App
- 使用
甚至包括需要多个权限的应用程序(这些应用程序将被多个权限映射到)Map
- 当我们搜索应用程序时,我们将使用
跟踪我们为多个授权应用程序确认的授权数量。因此,流程如下所示:地图
new mapAppInteger foreach entitlement in inputListOfEntitlement listOfApps = mapStringAppList.get(entitlement) if listOfApps found for each app in listOfApps if app needs singleEntitlement put app in output list else // needs multiple if app is in mapAppInteger map app --> count + 1 if mapAppInteger.get(app) == app.numberOfRequiredEntitlement put app in output list remove app from mapAppInteger else // not in mapAppInteger map app --> 1