java - 哪种数据结构用于快速查找、可变长度和顺序?

标签 java algorithm sorting lookup

我会预先声明这不是家庭作业问题,而是我正在进行的业余爱好项目的一部分。我有一个可行的解决方案,但我觉得我的解决方案很乱而且空间效率低下。

我有一个项目列表。

  • 列表的长度是可变的。项目按索引删除。项目被添加到列表的末尾。项目可以重复。
  • 当查找一个项目时,只是检查它是否已经在列表中。每个项目都有一个项目唯一的“ key ”。
  • 项目根据用户分配的优先级排序。

现在我正在使用两种数据结构来实现我的目标。

我有一个根据优先级排序的 ArrayList(为了保持顺序),以及一个根据项目键排序的 ArrayList(为了快速查找)。

是否有一个单一的数据结构可以解决这个问题?如果重要的话,我正在用 Java 编码。排序集几乎是我想要的,但因为有重复,我认为这行不通

最佳答案

既然你想按键查找,你应该使用某种 map 。

由于您希望多个对象与同一个键相关联,因此您需要键映射到对象列表,而不是键映射到单个对象。

我会使用 TreeMap 以便对其进行排序,其中键是您的键,值是应该为该键返回的对象列表的 ArrayList。

您必须实现一个比较器才能获得您想要的排序。

使用列表 map 时要考虑的一件事是,当您要添加项目时,您需要检查 map 是否已包含该键的列表。

例如如果您的 map 如下所示:

Map<String, List<Object>> map = new TreeMap<String, ArrayList<Object>>();

添加对象如下所示:

   public void addObject(String key, Object object) {
       List<Object> objects = map.get(key);
       if (objects == null) {
           objects = new ArrayList<Object>();
           map.put(key, objects);
       }
       objects.add(object);
   }

关于java - 哪种数据结构用于快速查找、可变长度和顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30466024/

相关文章:

java - 在 DOM 加载时加载 java applet

java - Eclipse null 分析对类文字发出 null 类型安全警告

java - 无法理解字符串之间编辑距离的想法/用处

linux - 根据唯一时间戳对目录中的文件进行排序并将它们分组

algorithm - 如何连接列表中具有相同值的字符串列表

java - Selenium/WebDriver - 处理仅有时存在的弹出窗口?

java - MemoryUsage max随时间变化

algorithm - 人气公式? (基于 "like it"、 "comments"、 "views")

python - 按日和月(忽略年份)python pandas 对数据进行排序

java - 迷失在尝试用 Java 编写排序算法的过程中