java - 找出数组类型来比较java中的数组

标签 java arrays casting compare

我正在尝试编写一种方法来比较 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;
        }
    }
}

最佳答案

I don't know what data type is being stored in each array.

这是个难题:

  • 你可以得到数组第一个元素的类型并查看它的类型;例如

    类类型=数组[0].getClass();

    但不能保证数组的所有元素都具有相同的(最派生的)类型。

  • 你可以得到数组的基类型;例如

    类类型 = array.getClass().getComponentType();

    但元素的实际类型可以是该类型的任何子类型。

How can I figure this out to perform a .sort()?

即使您设法获得了元素的实际类型(并且它们都具有相同的类型),您仍然会遇到困难。只知道该类型(通常)不会让您对它们进行排序。要对数组进行排序,您需要以下之一:

  • 元素类型必须实现Comparable接口(interface)。

  • 您必须提供一个单独的Comparator 对象。

我认为最好的办法是忘记类型并执行以下操作之一:

  • 只需调用 Arrays.sort(Object[]) .如果数组元素都实现了 Comparable 并且元素是相互可比较的,那么这将起作用。

  • 实现并使用比较器类。从理论上讲,这可能是一个“通用”比较器,可以对您可能在数组中遇到的任何一对对象进行排序。但更好的想法是实现多个比较器并将适当的比较器作为参数或其他东西传递给您的相等方法。

关于java - 找出数组类型来比较java中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7748287/

相关文章:

java - 将 android :Theme. 对话框更改为 Light AppCompat 对话框

java - 试图在java中找到长数据类型的范围

python - 使用增量运算符时,numpy 数组之和在数据类型方面的不同行为

java - 如何从 Point 对象获取 double

c++ - 通过具有多个参数的构造函数隐式转换

c++ - 子类转换和指针地址更改

java - Java 中非实例化类的内存管理是如何工作的?

java - 解释暴力算法

arrays - 在给定条件下哪种排序采用 O(n)

ios - 无法对齐数组中的图像(图集)-SpriteKit