java - 我应该使用什么方法来保持列表中带有键的项目的顺序(Java)?

标签 java list

如果出现以下情况,我应该使用什么方法将项目保留在列表中:

  1. 我有一个对象,其中包含项目列表,并且可以对这些项目执行操作
  2. 这些项目在列表中排序
  3. 我需要能够更改列表中项目的位置,并根据其 ID 添加或删除项目。
  4. 该列表最终将保存到数据库中(并且项目需要在此列表中保持其顺序)
  5. 在已订购的商品上拥有“order”属性是没有意义的(这些对象可以位于多种类型的列表中)。

我的选择(还有其他选择吗?):

  1. 使用 List 对象,以便它自动保持顺序。但我必须循环遍历所有对象(更糟糕的是)才能通过 Id 找到对象。
  2. 使用带有键/值(对象 ID/对象)的映射,这样可以轻松(且快速)检索对象,并保留另一个仅保留对象顺序的映射(对象 ID/对象顺序) )

解决方案 #1) 这似乎是最简单的解决方案,但存在性能缺陷。

解决方案 #2) 这似乎是最快的解决方案,但在重新排序列表时需要更多代码。

是否有一个我不知道的对象将被排序,具有键/值对并具有诸如 object.add(index, key, value) 或 object.getByIndex(index) 或 object.getByKey(键)?

最佳答案

正如Roni建议的那样,您需要使用自己的数据结构。我相信这是满足您的要求的唯一可行的选择。

我已经完成了一个示例来满足您的要求,作为起点,您可以在此基础上进行构建。

public class MapAndList {

    private List<String> keys = new ArrayList<String>();
    private Map<String, Object> keyValuePair = new HashMap<String, Object>();

    public void addItem(String key, Object item) {
        // TODO if the key is already present in the list throw exception
        keys.add(key);
        keyValuePair.put(key, item);
    }

    public void removeItem(String key) {
        keys.remove(key);
        keyValuePair.remove(key);
    }

    public void removteItem(int index) {
        removeItem(keys.get(index));
    }

    public void addItem(String key, Object item, int index) {
        keys.add(index, key);
        keyValuePair.put(key, item);
    }

}

希望这对您有帮助......

关于java - 我应该使用什么方法来保持列表中带有键的项目的顺序(Java)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11999415/

相关文章:

Python 操作 json、列表和字典

java - 如何在olingo中读取具有复杂属性的实体集合?

c++ - 正在释放的指针未分配错误?

java - 如何返回两个列表之间的差异?

java - 公共(public)配置 - JNDIConfiguration - 如何?

java - 如何将具有相同键但不同值的多个 map 合并为一个 map

python - 将字符添加到特定的重复字符串

java - 语法错误 : insert } to complete ClassBody

java - 在将 String 转换为 Date 时,java.util.Date 和 java.sql.Date 之间存在歧义

Java人脸检测库