我想在二维(x和y)中对2D节点(点)进行排序,并允许快速添加和删除。我想说这可以通过两个链表来完成,但发现Java的LinkedList隐藏了用户的链接。即如果我找到一个节点并从一个列表中删除它,我无法从另一个列表中快速删除它。
这可以解决吗?或者我需要编写自己的类来支持两个维度的链接?
答案 0 :(得分:0)
要从两个列表中删除相同的对象,请创建一个类似于
的包装类class PointWrap{
int id = 0;
Point p = null;
public PointWrap( int inid, Point inp){
id = inid;
p = inp;
}
}
插件看起来像这样
tree.put( new PointWrap( id++, point) );
当你迭代删除时,只需在删除之前保存id。这样你也可以从其他列表/树中删除。
答案 1 :(得分:0)
我会创建一个复合数据结构。
您会阅读还是写作更多?如果阅读更多,请使用ArrayList;如果写更多,请使用LinkedList。将此结构存储为int []并输入值{x,y},并在每个插入块之后将此结构排序为x值。
此外,维护一个使用y值填充的数组,而不是插入,但在对x-list进行排序时,此数组将填充实际位于x列表中的值。
将所有这些放入一个类中,并将方法绑定在1个引擎盖下。神圣的封装蝙蝠侠!
你可以让类从getByX()或getByY()
返回int [2]首先要问自己的问题是,“我是否绝对需要一直排序这两个列表,或者只在读取操作块期间排序?”如果你的答案是后者,这对你来说就好了。
需要考虑的另一件事是,您需要队列,双端队列,堆栈还是所有随机访问?