是否有更好的方法在Java中完成以下操作,而不使用外部库。
我需要建模int (原语)的组/子(树样)结构。在Json
[{1,1}, {1,2}, {2,1},{3,1}]我需要支持元素的添加/删除(元素是一对{组,子}),没有重复。
我在想,保持一个数据结构就像。
ArrayList<HashMap<Integer,Integer>>加一句。
遍历ArrayList,根据要插入的值检查HashMap键和值,如果不存在则插入。
删除:
遍历ArrayList,根据要删除的值检查HashMap键和值,如果存在则删除。
是否有更好的标准库数据结构/方法。
根据下面的一个答案,我做了一个这样的课程。请让我知道任何需要注意的事情。我期望(并将尝试) 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;
}
}发布于 2013-02-07 17:12:21
如果我明白你想做什么,这可能会更简单:
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);发布于 2013-02-07 17:15:36
您可以使用两个属性编写一个名为KeyValue的类,以保存组和子类。将KeyValue对象添加到ArrayList中。对于CRUD操作,可以在equals对类中实现KeyValue和compare。
发布于 2013-02-07 17:20:49
不要使用HashMap,而是使用一个名为Pair的类,其中包含两个字段-- {group,child},这将实现Comparable接口。然后实现/重写它的equals()、hashCode()和compareTo()方法。然后根据您的需要使用List<Pair>或Set<Pair>来保存它们。compareTo()的实现也为您提供了对Pairs进行排序的灵活性。
https://stackoverflow.com/questions/14756868
复制相似问题