我正在尝试编写一个方法,在不使用.equals()的情况下用Java语言比较两个数组。
在比较数组的大小/长度之后,我想对它们进行排序(假设它们的大小相同),但我不知道每个数组中存储的数据类型是什么。我如何才能解决这个问题来执行.sort()?
我突然想到,我可以做一个deepToString()而不用担心实际的类型,因为我在这里只是比较数组。
if(array1.length = array2.length)
{
//figure out array type to perform sorts???
array1.sort(TYPE[]);
array2.sort(TYPE[]);
for(int i = 0; i < array1.size(); i++)
{
if(array1[i] != array2[i])
{
return false;
}
if(i = array1.size() - 1)
{
return true;
}
}
}
发布于 2011-10-13 10:14:11
我不知道每个数组中存储的是什么数据类型。
这是一个困难的问题:
类类型= array.getClass();
但不能保证数组的所有元素都具有相同的(派生最多的)类型。
类类型= array.getClass().getComponentType();
但元素的实际类型可以是该类型的任何子类型。
我如何才能解决这个问题来执行.sort()?
即使您设法获得了元素的实际类型(并且它们都具有相同的类型),您仍然被卡住了。仅仅知道该类型并不能(通常)让你对它们进行排序。要对数组进行排序,您需要执行以下操作之一:
element类型必须实现interface.
Comparator
对象。我认为你最好的办法就是忘掉类型,做下面的事情之一:
Arrays.sort(Object[])
即可。如果数组元素都实现了比较器,并且元素是相互比较的( comparable.发布于 2011-10-13 09:02:14
Class type1 = array1[0].getClass();
Class type2 = array2[0].getClass();
if(type1!=type2)
return false;
但是您不使用equals()
的方法是不好的。在不知道数组中是哪种对象的情况下,使用== (或!=)运算符可能只是比较对象的地址(除非它们是原始类型)。
在上运行您的函数
array1 = {"a", "b", "c"};
array2 = {"a", "b", "c"};
将返回false。
https://stackoverflow.com/questions/7748287
复制相似问题