[英]figure out array type to compare arrays in java
我正在尝试编写一个方法来比较Java中的两个数组而不使用.equals()。
在比较数组的大小/长度后,我想对它们进行排序(假设它们的大小相同),但我不知道每个数组中存储的数据类型。 我怎么能想出这个来执行.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;
}
}
}
我不知道每个数组中存储的数据类型。
这是一个棘手的问题:
您可以获取数组的第一个元素的类型并查看其类型; 例如
Class type = array [0] .getClass();
但是不能保证数组的所有元素都具有相同的(派生的)类型。
你可以得到数组的基本类型; 例如
Class type = array.getClass()。getComponentType();
但元素的实际类型可以是该类型的任何子类型。
我怎么能想出这个来执行.sort()?
即使你设法获得元素的实际类型(并且它们都具有相同的类型),你仍然会陷入困境。 只知道该类型(通常)不允许您对它们进行排序。 要对数组进行排序,您需要执行以下操作之一:
元素类型必须实现Comparable
接口。
您必须提供单独的Comparator
对象。
我认为你最好的办法就是忘记这些类型并做下列其中一项:
只需调用Arrays.sort(Object[])
。 如果数组元素都实现Comparable
并且元素可以相互比较,则此方法有效。
实现并使用比较器类。 从理论上讲,这可能是一个“通用”比较器,可以命令您可能在阵列中遇到的任何对象对。 但更好的想法是实现多个比较器并将相应的比较器作为参数或其他东西传递给您的相等方法。
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。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.