需要帮助使用java.lang.reflect.Array来排序数组

时间:2017-02-01 09:49:03

标签: java arrays

采访问题是编写此方法以删除数组中的重复元素。

public static Array removeDuplicates(Array a) {
 ...            

返回类型为java.lang.reflect.Array,参数也为java.lang.reflect.Array类型。

如何为任何数组调用此方法?

也不确定我的实施:

public static Array removeDuplicates(Array a)
{
    int end=Array.getLength(a)-1;
    for(int i=0;i<=end-1;i++)
    {
        for(int j=i+1;j<=end;j++)
        {
            if(Array.get(a, i)==Array.get(a, j))
            {
                Array.set(a, j, Array.get(a, end));
                end--;
                j--;
            }
        }
    }
    Array b=(Array) Array.newInstance(a.getClass(), end+1);
    for(int i=0;i<=end;i++)
        Array.set(a, i, Array.get(a, i));
    return b;
}

2 个答案:

答案 0 :(得分:0)

此代码存在各种问题。从这里开始:

get()

请注意,equals()次调用会返回对象。因此,当您传入一个字符串数组时,与==进行比较很可能会导致错误的结果(因为许多实际上相等的对象仍然具有不同的引用---所以你的支票一直返回 false !)

所以,要改变的第一件事是:使用end--; 代替==!

另一个问题是:

int numberOfOutgoingItems = end;

说真的:你永远不会更改控制for循环的变量。

相反:有另一个柜台,比如

get(Object array, int index)

然后减少 计数器!

关于你的最后一个问题 - 检查javadoc;例如get()。这是 int a[] = ...; Object oneValue = Array.get(a, 0);

所以你应该能够做类似的事情:

getInt()

例如。

<强>声明即可。我不得不承认:我不知道Array实现是否智能足以自动将int []的元素转换为Integer对象。

很可能必须首先编写代码来检测数组的确切类型(例如,如果它是int数组);而是拨打getObject()而不是{{1}}。

除此之外,还可以找到一些有关如何使用反射/数组的进一步阅读here

答案 1 :(得分:0)

您可能需要考虑使用不同的数据结构(如hashmap)来检测重复项(O(1)),而不是使用嵌套for循环(O(n ^ 2))进行循环。它应该给你更好的时间复杂性。