【发布时间】:2015-03-14 23:42:43
【问题描述】:
您好,我有一个简单的问题。我从 API 获取数据,他们设置数据的方式是对象有一个 id,然后我将它返回到一个列表中。
所以我会得到一个像这样的对象列表:
List = {Object1, Object2, Object3, ..., ObjectN};
这些对象将有一个像这样的父 id:
List = {9, 9, 9, 10, 10, 10, 10}
我想将对象子列表到包含相同父 ID 的列表中。什么是一个体面的算法来完成这个?所以是这样的:
Object1's parent id is 9
Object2's parent id is 9
Object3's parent id is 9
Object4's parent id is 10
Object5's parent id is 10
Object6's parent id is 10
List<Object> = {Object1, Object2, Object3} // List of all objects with parent id 9
List<Object> = {Object4, Object5, Object6} // List of all objects with parent id 10
我也考虑过使用HashMap,这是好的做法吗?出于缩放目的,我相信对象列表永远不会超过数百或数千,因此我认为速度在这里不一定是一个大问题。
背景:语言是Java,一个Object会有这样的参数:
Object: {
parentId:
name:
//etc.
}
编辑:我考虑得越多,我就越考虑使用排序算法
感谢 SamV:
public HashMap<Integer, List<Object>> createHashMap() {
myHashMap = new HashMap<>();
for (Object object : mObjectList) {
int parentId = object.getParentId();
if (!myHashMap.containsKey(parentId)) {
List<Object> newList = new ArrayList<>();
myHashMap.put(parentId, newList);
}
myHashMap.get(parentId).add(object);
}
return myHashMap;
}
【问题讨论】:
-
因此,如果您有对象并且对象具有 parentId,似乎使用 HashMap 对对象进行排序是 HashMap 键是父 ID 的最佳解决方案。循环遍历列表,并以父 ID 作为键和新列表(如果该条目不存在)初始化一个新的 HashMap 条目,然后添加对象..
-
您的用例尖叫着使用地图接口。您可能还想考虑其他实现,例如 TreeMap。
-
这是什么语言的?并且这些列表是否没有一起返回,例如作为一个对象列表,其中对象具有 parentid 属性?
标签: algorithm list divide sublist