用java处理向量对象

用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

我有一个对象向量,需要使用开始索引和结束索引进行处理。如果多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
         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/<代码>代替<代码>矢量< /代码> .<


一个重要的注意事项:这需要按照开始和结束索引对向量/列表进行排序,因此请确保您首先这样做。

这会使循环无限。这确实很有帮助