用java处理向量对象
我有一个对象向量,需要使用开始索引和结束索引进行处理。如果多LPE对象的结束索引相同,我必须在用java处理向量对象,java,vector,Java,Vector,我有一个对象向量,需要使用开始索引和结束索引进行处理。如果多LPE对象的结束索引相同,我必须在name中只保留较大的字符串。并且必须与开始索引相同,如下所示 vector =start:21 end:24 name:abc start:22 end:24 name:bc start:28 end:31 name:xyz start:29 end:31 name:yz start:30 end:31 name:z
name
中只保留较大的字符串。并且必须与开始索引相同,如下所示
vector =start:21 end:24 name:abc
start:22 end:24 name:bc
start:28 end:31 name:xyz
start:29 end:31 name:yz
start:30 end:31 name:z
start:45 end:51 name:robert
start:45 end:48 name:rob
for(int i=0;i<vecotr.size();i++)
{
NameBuffer b=vecotr.get(i);
if(i+1<vecotr.size())
{
NameBuffer b1=vecotr.get(i+1);
if(b.end==b1.end )
{
if(b.name.length()>b1.name.length())
{
vector.remove(i+1);
}
}
if(b.begin==b1.begin )
{
if(b.name.length()>b1.name.length())
{
vector.remove(i+1);
}
}
}
}
我必须处理这个向量,然后用下面的方法打印
vector =start:21 end:24 name:abc
start:28 end:31 name:xyz
start:45 end:51 name:robert
我试过下面的方法
vector =start:21 end:24 name:abc
start:22 end:24 name:bc
start:28 end:31 name:xyz
start:29 end:31 name:yz
start:30 end:31 name:z
start:45 end:51 name:robert
start:45 end:48 name:rob
for(int i=0;i<vecotr.size();i++)
{
NameBuffer b=vecotr.get(i);
if(i+1<vecotr.size())
{
NameBuffer b1=vecotr.get(i+1);
if(b.end==b1.end )
{
if(b.name.length()>b1.name.length())
{
vector.remove(i+1);
}
}
if(b.begin==b1.begin )
{
if(b.name.length()>b1.name.length())
{
vector.remove(i+1);
}
}
}
}
上面的代码示例没有删除具有相同结束索引或开始索引的所有条目。它能够删除名称:bc
和名称:yz
,但在向量之后不能删除名称:z
。删除(i+1)代码>添加i--代码>
然后,在删除一个元素后,它将再次检查该元素,以防它与后面的多个元素匹配。让我们检查以下序列部分:
[2]: start:28 end:31 name:xyz
[3]: start:29 end:31 name:yz
[4]: start:30 end:31 name:z
现在,如果i==2
您也在检查i+1==3
,并删除索引3处的元素。
接下来,我被设置为3,它现在将索引3(z
)处的元素与索引4(robert
)处的元素进行比较,并且由于起点和终点都不匹配,因此不需要删除
您可以尝试通过向后移动来解决此问题,即从i=vector.size()-2
到i=0
,比较i
和i+1
处的元素(由于从下一个元素开始,这些元素始终应该存在)
这样,您可以比较元素3和4,并保留3(yz
)。然后将i设置为2,现在比较元素2和3,之后保留元素2(xyz
)
如果最大的元素在一个序列的末尾,那就无关紧要了。
考虑这一点:
[0]: a
[1]: ab
[2]: abc
首先比较ab
和abc
,i为1。然后删除ab
,这使得abc
移动到索引1。在下一次迭代中,i减为0,现在比较a
和abc
,这次删除a
顺便说一句,如果两个元素具有相同的开始和结束索引,代码可能会删除太多内容。因此,首先检查所有条件,如果其中任何匹配项只删除一次
以下是您的循环的改编版本:
for(int i = vector.size() - 2; i >= 0; i--)
{
// no need to check here, the loop ensures that i and i+1 are within the bounds
NameBuffer b=vector.get(i);
NameBuffer b1=vector.get(i+1);
if(b.end==b1.end || b.begin==b1.begin)
{
if(b.name.length()>b1.name.length())
{
vector.remove(i+1);
}
else
{
vector.remove(i);
}
}
}
另一个注意事项:考虑使用<代码> ARAYLIST/<代码>代替<代码>矢量< /代码> .<
一个重要的注意事项:这需要按照开始和结束索引对向量/列表进行排序,因此请确保您首先这样做。这会使循环无限。这确实很有帮助