在Java中比较Vector

时间:2012-03-06 14:32:50

标签: java vector

假设我有一个包含以下值的向量

id = 100
latitude = 2 .33
longitude = 4.55

id = 200
latitude = 1.00
longitude = 3.00

id = 300
latitude = 2.33
longitude = 4.55 

我有以下变量

int item = 10;
double x = 2.33;
double y = 4.55 

1。)现在,我想将2个变量(x,y)的值与向量中的(纬度,经度)值进行比较。

2。)如果(x,y)值等于(纬度,经度),那么我将项目变量的值添加到矢量

我实现它的逻辑如下

Vector al;
int size = al.size() //need to adjust the size as and when i add/remove items from al

for(int i=0;i<sz-1;i++)
{
  if(al.get(i).getClass().equals(Double.TYPE)) //Need to ignore id in Vector

   if(a.get(i)==x & a.get(i+1)==y)
    {
      //add the sensor id at i-2 and adjust the size of vector
    }
   else {
          //remove the items 200,1.00,3.00
          // adjust the size of vector
        }

但上面的代码并没有给我预期的结果。任何人都可以为我提供工作代码以获得最终输出如下

10,100,2.33,4.55
10,300,2.33,4.55

请注意,预期的o / p中不存在内容200,1.00,3.00,'(x,y)的coz值与(纬度,经度)不匹配

提前致谢。

5 个答案:

答案 0 :(得分:4)

请勿将==Double个对象一起使用。您将它们比作相同的实例,而不是具有相同的值

对于双打,最好将差异比较低于某个阈值,因为可能存在不同的舍入伪像。

答案 1 :(得分:3)

我认为使用按位AND是一个错误:

if(a.get(i)==x & a.get(i+1)==y)

使用布尔AND:

if(a.get(i)==x && a.get(i+1)==y)

请参阅Anony-Mousse与使用==对象相关的答案。

答案 2 :(得分:0)

由于你知道向量在位置0,3,...,(0 mod 3)存储id,你应该在i = 1处开始你的循环并且每次增加3:

for(int i=1;i<sz;i+=3)

然后您不必检查该项目是否为双

答案 3 :(得分:0)

使用集合时,我会说:使用Apache集合 - 它们有一个非常有用的CollectionUtils实用程序对象:

http://commons.apache.org/collections/apidocs/org/apache/commons/collections/CollectionUtils.html

答案 4 :(得分:0)

这是解决上述问题的方法。我包含代码段

public void manip() {

    System.out.println("ArratList (Before) :" + Array);
    int sz = Array.size();
    for (int i = 0; i < sz - 1; i++) {
        Object o = Array.get(i);
        if (o instanceof Double) {
            if (Array.get(i).equals(x) & Array.get(i + 1).equals(y)) {
                if (i == 1) {

                    Array.add(0, item);
                } else {

                    Array.add(i - 1, item);
                }
                i = i + 3;
            } else {
                Array.remove(i - 1);
                Array.remove(i - 1);
                Array.remove(i - 1);
                i = i - 1;
            }
            sz = Array.size();
        }
    }

    System.out.println("ArratList (After) :" + Array);
 }