首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >找出数组类型以比较java中的数组

找出数组类型以比较java中的数组
EN

Stack Overflow用户
提问于 2011-10-13 08:57:02
回答 2查看 151关注 0票数 3

我正在尝试编写一个方法,在不使用.equals()的情况下用Java语言比较两个数组。

在比较数组的大小/长度之后,我想对它们进行排序(假设它们的大小相同),但我不知道每个数组中存储的数据类型是什么。我如何才能解决这个问题来执行.sort()?

我突然想到,我可以做一个deepToString()而不用担心实际的类型,因为我在这里只是比较数组。

代码语言:javascript
运行
复制
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;
        }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-13 10:14:11

我不知道每个数组中存储的是什么数据类型。

这是一个困难的问题:

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

类类型= array.getClass();

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

  • 您可以获得数组的基本类型;例如

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

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

我如何才能解决这个问题来执行.sort()?

即使您设法获得了元素的实际类型(并且它们都具有相同的类型),您仍然被卡住了。仅仅知道该类型并不能(通常)让你对它们进行排序。要对数组进行排序,您需要执行以下操作之一:

element类型必须实现interface.

  • You必须提供单独的Comparator对象。

我认为你最好的办法就是忘掉类型,做下面的事情之一:

  • 只需调用Arrays.sort(Object[])即可。如果数组元素都实现了比较器,并且元素是相互比较的( comparable.
  • Implement ),并且使用了一个比较器类,那么这是可行的。从理论上讲,这可以是一个“通用的”比较器,可以对数组中可能遇到的任何一对对象进行排序。但一个更好的想法是实现多个比较器,并将适当的比较器作为参数或其他方式传递给您的相等方法。
票数 2
EN

Stack Overflow用户

发布于 2011-10-13 09:02:14

代码语言:javascript
运行
复制
Class type1 = array1[0].getClass();
Class type2 = array2[0].getClass();
if(type1!=type2)
    return false;

但是您不使用equals()的方法是不好的。在不知道数组中是哪种对象的情况下,使用== (或!=)运算符可能只是比较对象的地址(除非它们是原始类型)。

在上运行您的函数

代码语言:javascript
运行
复制
array1 = {"a", "b", "c"};
array2 = {"a", "b", "c"};

将返回false。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7748287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档