是否有更好的方法在不使用外部库的情况下用 Java 执行以下操作。
我需要对 int(原始)的组/子(树状)结构进行建模。在 Json 中
[{1,1}, {1,2}, {2,1},{3,1}]
我需要支持添加/删除元素(元素是一对 {group, child} )而不重复。
我在想,保持这样的数据结构。
ArrayList<HashMap<Integer,Integer>>
添加。
遍历 ArrayList,根据要插入的值检查 HashMap 键和值,如果不存在则插入。
删除:
遍历 ArrayList,根据要删除的值检查 HashMap 键和值,如果存在则删除。
标准库是否有更好的数据结构/方法。
根据下面的答案之一,我开设了这样的类(class)。 请让我知道任何需要注意的事情。我期待(并打算尝试)arraylist 将通过使用 KeyValue 类中的 equal 方法正确处理添加/删除。谢谢。
static class KeyValue {
int groupPos;
int childPos;
KeyValue(int groupPos, int childPos) {
this.groupPos = groupPos;
this.childPos = childPos;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
KeyValue keyValue = (KeyValue) o;
if (childPos != keyValue.childPos) return false;
if (groupPos != keyValue.groupPos) return false;
return true;
}
@Override
public int hashCode() {
int result = groupPos;
result = 31 * result + childPos;
return result;
}
}
最佳答案
如果我明白你想做什么,这可能会更简单:
TreeMap<Integer,TreeSet<Integer>>
or
HashMap<Integer,HashSet<Integer>>
所以,而不是
[{1,1}, {1,2}, {2,1}, {3,1}]
你会
[{1, {1, 2}},
{2, {1}},
{3, {1}}]
请注意,上述所有 4 个类都会自动处理消除重复项。
添加:
TreeMap<Integer, TreeSet<Integer>> map;
TreeSet<Integer> set = map.get(group);
if (set == null) // create it if it doesn't exist
{
set = new TreeSet<Integer>();
map.put(group, set);
}
set.add(child);
删除:
TreeMap<Integer, TreeSet<Integer>> map;
TreeSet<Integer> set = map.get(group);
set.remove(child);
if (set.isEmpty()) // remove it if it is now empty
map.remove(group);
关于Java : ArrayList<HashMap<Integer, 整数>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14756868/