我有两个初始化的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,
答案 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
之后不能再表示奇数。因此,我建议您不要将long
与double
进行比较。
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);
}
}