在Java中修改TreeSet的对象

时间:2014-02-28 15:40:50

标签: java class

如果我有一个课程如下

 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插入中看到结果,并且树集中已存在的元素保持不变。

1 个答案:

答案 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将变得不一致。在这种情况下,一个简单(非常实用)的解决方法可能是删除元素,执行数组的修改,然后重新插入元素。但我认为,无论你想达到什么目标,都有更优雅的解决方案。