如果我有一个课程如下
class tree implements Comparable
{
int line_no;
line_segment line[];
public int compareTo(Object obj)
{
tree t = (tree)obj;
if(this.line[line_no]< t.line[line_no])
return 1;
else if(this.line[line_no]==t.line[line_no])
return 0;
else
return -1;
}
如果我创建以下类的TreeSet,其中每个对象的数组变量“ line ”指向main方法中定义的同一对象。如何修改名为“ line ”的变量数组,以便在新元素的treeSet插入中看到结果,并且树集中已存在的元素保持不变。
答案 0 :(得分:1)
编辑:重要编辑,请参阅答案底部
目前,您可能正在创建这样的tree
个对象:
line_segment line[] = new line_segment[n];
for (int i=0; i<lines; i++)
{
tree t = new tree();
t.line_no = i;
t.line_segment = line;
treeSet.add(t);
}
您必须为要创建的每个tree
创建新数组:
for (int i=0; i<lines; i++)
{
tree t = new tree();
t.line_no = i;
// Create new array for each element
line_segment line[] = new line_segment[n];
t.line_segment = line;
treeSet.add(t);
}
另请注意,在tree
插入TreeSet后,您应该不修改此数组的元素。否则,将不指定TreeSet的行为。
编辑:基于代码,必须考虑到希望数组相等的可能性,并且每个元素应仅引用数组的一个特定行。在这种情况下, not 必须为每个元素创建一个新数组。但是当您更改数组的内容时,TreeSet将变得不一致。在这种情况下,一个简单(非常实用)的解决方法可能是删除元素,执行数组的修改,然后重新插入元素。但我认为,无论你想达到什么目标,都有更优雅的解决方案。