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

时间:2012-08-17 03:32:21

标签: java list

如果符合以下条件,我应该使用什么方法将项目保留在列表中:

  1. 我有一个包含项目列表的对象,可以对这些项目采取措施
  2. 这些项目是在列表中订购的
  3. 我需要能够更改列表中项目的位置,并根据其ID添加或删除项目。
  4. 该列表最终将保存到数据库中(并且项目需要将其订单保存在此列表中)
  5. 在订购商品上设置属性“订单”是没有意义的(这些对象可以是多种列表)。
  6. 我的选择(还有其他选择吗?):

    1. 使用List对象,以便自动保留订单。但我必须遍历所有对象(更糟糕的是)通过Id找到一个对象。
    2. 使用带有键/值(对象ID /对象)的地图,这样可以很容易地检索对象(并且快速)并保留另一个只保持对象顺序的地图(对象ID /对象顺序) )
    3. 解决方案#1)这似乎是性能最差的最简单的解决方案。

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

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

2 个答案:

答案 0 :(得分:1)

由于Roni建议您需要使用自己的数据结构。我相信这是填写您的要求的唯一选择。

我已经做了一个示例,以starting point的形式填写您的要求,您可以在此基础上进行构建。

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);
    }

}

希望这可以帮助你......

答案 1 :(得分:0)

如果你的项目不会重复,那么使用indexOf()方法获取对象的索引,然后你可以使用get(int Index)直接访问对象

同样重写等于Item对象的方法以返回基于ID的比较,因此您将获得基于Id的重试。

刚检查了indexOf方法的源代码,它只迭代整个列表:(