如何记录多个对象的位置,同时仍然可扩展?

时间:2014-11-21 18:16:50

标签: java list

我试图获得三个不同的列表'对象一起工作。

总结一下我想要做的事情,我试图保存三个不同的变量,但让它们全部被一起访问。

所以,如果我说:

void main() {
    addStuff(1, 12, true);
}
void updateStuff(int i1, int i2, boolean b1) {
    list1.add(i1);
    list2.add(i2);
    list3.add(i3);
}

然后会保存三个相应的值。

现在,我将如何检索这些变量,同时仍然支持从列表中删除元素(也就是说,如果我从每个列表中删除一个元素 - 彼此对应的元素。)

如果我没有清楚地解释自己,请道歉 - 如果需要,我会很乐意提供更多细节。

谢谢!

2 个答案:

答案 0 :(得分:5)

您应该创建一个包含这两个整数和一个布尔值的类。

然后你可以拥有一个List<YourClass>

public class YourClass 
{
    private int a;
    private int b;
    private boolean c;

    public YourClass (int a, int b, boolean c) {
       this.a=a;
       this.b=b;
       this.c=c;
   }

   // add some getters and setters here
}

    void updateStuff(int i1, int i2, boolean b1) 
    {
        list.add(new YourClass(i1,i2,b1));
    }

这样您就不必担心在添加/删除元素时同步列表,因为您只有一个列表。

答案 1 :(得分:1)

好吧,如果我从你对伊兰答案的评论中理解你要做的事情(在你的问题上提供这些信息可能是一个好主意,这样更多的人可以帮助你),你在笛卡尔平面上有一堆点,必须检查一个点是否太靠近另一个。 为了避免在每次需要这些信息时需要这么多检查,您希望将其存储在某种数据结构中,每次插入新点时都会更新。 这是对的吗?

如果是这样,您可以创建一个表示此信息的图表:

public class MyPoints {
    private List<Point> points = new ArrayList<>();

    private List<List<Boolean>> tooCloseGraph = new ArrayList<>();

    public void addPoint(Point point){
        List<Boolean> newLine = new ArrayList<>();
        for(Point p : points){
            newLine.add(p.isTooClose(point));
        }
        newLine.add(true) //Assuming a point is too close to itself
        tooCloseGraph.add(newLine);
        points.add(point);
    }

    public boolean isTooClose(int a, int b){
        if(a > b)
            return tooCloseGraph.get(a).get(b);
        else
            return tooCloseGraph.get(b).get(a);
    }

    public boolean isTooClose(Point a, Pont b){
        return isTooClose(points.indexOf(a), points.indexOf(b));
    }
}

我没有测试过,但我认为它有效。

干杯!