如果出现以下情况,我应该使用什么方法将项目保留在列表中:
- 我有一个对象,其中包含项目列表,并且可以对这些项目执行操作
- 这些项目在列表中排序
- 我需要能够更改列表中项目的位置,并根据其 ID 添加或删除项目。
- 该列表最终将保存到数据库中(并且项目需要在此列表中保持其顺序)
- 在已订购的商品上拥有“order”属性是没有意义的(这些对象可以位于多种类型的列表中)。
我的选择(还有其他选择吗?):
- 使用 List 对象,以便它自动保持顺序。但我必须循环遍历所有对象(更糟糕的是)才能通过 Id 找到对象。
- 使用带有键/值(对象 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/