Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 需要帮助存储/检索数据吗_Java_Data Structures - Fatal编程技术网

Java 需要帮助存储/检索数据吗

Java 需要帮助存储/检索数据吗,java,data-structures,Java,Data Structures,用户有一个数字数组列表。这些数字对应于他们可以访问的应用程序。某些申请有不同的权利编号(即-3、72等)。我想做的是将这些数据存储在地图中,这样当用户登录时,他们可以在地图中输入自己的号码,并快速获得他们有权使用的应用程序。但是,有些申请需要2到3个权利编号。例如,一个条目可以是:(“101和234”,“应用程序1”)。我想知道是否有一种理想的方法可以从地图中检索用户所满意的所有值 在我目前的情况下,该程序将用户数据与每个应用程序进行比较,并确认或拒绝访问。这似乎效率低下。非常感谢您对我们的任何

用户有一个数字数组列表。这些数字对应于他们可以访问的应用程序。某些申请有不同的权利编号(即-3、72等)。我想做的是将这些数据存储在地图中,这样当用户登录时,他们可以在地图中输入自己的号码,并快速获得他们有权使用的应用程序。但是,有些申请需要2到3个权利编号。例如,一个条目可以是:(“101和234”,“应用程序1”)。我想知道是否有一种理想的方法可以从地图中检索用户所满意的所有值

在我目前的情况下,该程序将用户数据与每个应用程序进行比较,并确认或拒绝访问。这似乎效率低下。非常感谢您对我们的任何帮助


注意:我正在从XML中读取应用程序及其数字,因此我可以根据自己的意愿存储它们。

如果每个应用程序需要大量数字,最好的方法是使用集合交集。如果数字是连续的或至少是密集的,则可以将其优化为一个位集。不过,对于一个或两个数字,我建议只单独测试每个数字,因为它可能比全套操作更快。

解决方案:

  • 为每个应用程序定义一个类(我们称之为
    App
    )。该类包含应用程序的名称和(排序的)权利列表/数组
  • 使用映射从字符串映射到
    App
    Map
    用于所有单一授权应用(您可以使用
    HashMap
    TreeMap
    -您的选择)。如果有多个应用程序只需要一个和相同的权限,请考虑<代码> map < /代码>。从地图中排除需要多个权限的应用,并将其存储在单独的列表/数组中
  • 当你得到一个有权检索应用程序的列表时,在列表中循环,只需抓取
    映射字符串映射到的所有内容即可。对于需要多个权限的用户,只需逐个检查(您可以通过对给定权限列表进行排序,并将权限按排序顺序存储到每个
    App
    ,从而加快检查速度,但这可能并不重要,因为大小很小)
该解决方案降低了操作的时间复杂性。然而,在我看来,几百个应用程序是大约10个应用程序数量的几倍是相当小的,除非你多次调用它。最好对原始方法和此方法进行比较,因为开销可能会影响时间上的任何改进

进一步的改进(或不改进)是:

  • 使用
    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
    

你能举例说明你的问题吗?我想我没有把所有的案例都记录下来。很抱歉,每次用户登录时,我都想将他们的字符串列表与对应于应用程序的字符串映射进行比较。用户权限编号可能类似于:{“1”、“2”、“3”、“5”}。我想将此字符串列表与所有应用程序编号进行比较。大多数申请都有一个授权编号。因此,我在地图中输入1,返回“应用程序3”。那很好。但有些申请需要权利编号“2和3”。当数字是复合的时,我在O(1)时间内做这件事有困难。我在考虑另一个映射输出是这样的:“1”->“App1”,“2”->“App2”,“1”,“2”}-->“AppTwoAuthentity”可能吗?如果你给出{“1”,“2”},它会返回所有3个应用程序吗?正确。目前,它检查每个应用程序,并将该应用程序编号与用户进行比较。对于300多个应用程序来说,如果用户只有大约10个数字,这显然是低效的。我的目标是将每个权利编号输入到所有应用程序的地图中,并返回他/她有权访问的应用程序列表。权利编号是纯数字,还是可以是任意字符串?(同时询问现在和未来)非常感谢!我会比较两者!