比较Java中不同类型的向量

时间:2014-10-30 03:20:07

标签: java arrays vector

我有两个初始化的Java向量:

Integer intArr[] = {100, 200, 300};
Double doubleArr[] = {100.0, 200.0, 300.0};

Vector<Integer> vInt = new Vector<Integer>(Arrays.asList(intArr));
Vector<Double> vDouble = new Vector<Double>(Arrays.asList(doubleArr));

我做的比较就像这样

boolean equal = vInt.equals(vDouble);  //equal = false

我如何比较两个向量并得到true作为结果,考虑到尽管类型不同,向量具有相同的值?

TIA,

4 个答案:

答案 0 :(得分:1)

你别无选择,只能依次比较每个元素;通用解决方案看起来像这样:

public static boolean compareArrays(List<Integer> vInt, List<Double> vDouble) {
    if (vInt.size() != vDouble.size())
        return false;
    for (int i = 0; i < vInt.size(); i++) {
        Integer iVal = vInt.get(i);
        Double  dVal = vDouble.get(i);
        if (!iVal.equals(dVal))
            return false;
    }
    return true;
}

作为旁注 - 你不应该使用Vector,除非你确实需要同步访问,否则你应该使用ArrayList

答案 1 :(得分:1)

自己进行比较。请注意,这会受到转换错误的影响,例如在大约2 53 double之后不能再表示奇数。因此,我建议您不要将longdouble进行比较。

public static boolean numericEquals(
    Collection<? extends Number> c1,
    Collection<? extends Number> c2
) {
    if(c1.size() != c2.size())
        return false;
    if(c1.isEmpty())
        return true;

    Iterator<? extends Number> it1 = c1.iterator();
    Iterator<? extends Number> it2 = c2.iterator();

    while(it1.hasNext()) {
        if(it1.next().doubleValue() != it2.next().doubleValue())
            return false;
    }

    return true;
}

答案 2 :(得分:0)

没有好办法做到这一点。值100.0和100不相等。您必须继承Vector并覆盖equals。在你的equals方法中,你需要遵守Vector的equals的一般契约,但是你必须执行一些比较操作,如下所示:

if(vInt.size() == vDouble.size()){
    for(int index = 0; index < vInt.size()){
        if(vInt.get(index) - (int) vDouble.get(index) == 0){
             //etc.
        }
    }
}

请注意,在此比较中,100 - (int) 100.4d将评估为true

答案 3 :(得分:0)

我认为需要迭代并比较如下。

package org.owls.compare;

import java.util.Arrays;
import java.util.Vector;

public class Main {
    public static void main(String[] args) {
        Integer intArr[] = {100, 200, 300};
        Double doubleArr[] = {100.d, 200.0, 300.0};
        Vector<Integer> v1 = new Vector<Integer>(Arrays.asList(intArr));
        Vector<Double> v2 = new Vector<Double>(Arrays.asList(doubleArr));
        boolean isSame = true;
        for(int i = 0; i < v1.size(); i++){
            int dval = (int)((double)v2.get(i));
            if(!v1.get(i).equals(dval)){
                isSame = false;
            }
        }

        System.out.println("result >> " + isSame);
    }
}