【发布时间】:2013-02-07 17:08:30
【问题描述】:
有没有更好的方法在 Java 中执行以下操作,而不使用外部库。
我需要对 int(原始)的组/子(树状)结构进行建模。在 Json 中
[{1,1}, {1,2}, {2,1},{3,1}]
我需要支持添加/删除元素(元素是一对 {group, child} )而不重复。
我在想,保持一个像这样的数据结构。
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;
}
}
【问题讨论】:
-
响应编辑 -
Set(例如TreeSet(要求您的类扩展 java.lang.Comparable 或作为输入给出的Comparator类)/HashSet)将处理添加/remove 操作比ArrayList更有效。 -
在
equals()代替if (o == null || getClass() != o.getClass()) return false;使用if(! (o instanceof KeyValue)) return false;