noobcodes
noobcodes

Reputation: 17

java recursion test if arraylist are equal

I have some code that I would like to make more efficient by recursion. Trouble is I don't know where to start. The code compares two arraylists a and b to see if they are equal. Assume the sizes of both arrays are equal.

The code is

public boolean isEqual(A B) {
    boolean answer = false;
    if (lessThanOrEqualTo(B) == true);
    for (int i = 0; i < DList.size(); i++) {
        if (DList.get(i) == B.DList.get(i)) answer = true;
        else answer = false;
    }
    return answer;
}

I have currently written

public boolean isEqualRecursion(A B) {
    if DList.size() == 0;
    return false();
} else {

}

I know the stopping case is 0 as when size is 0 nothing happens. I have no idea what to write next

Any help will be appreciated

Thanks

Upvotes: 0

Views: 554

Answers (3)

Jeffrey.S
Jeffrey.S

Reputation: 1

This is a typical recursion question. You might want to try something like this:

int x = 0;

if(Dlist.get(x) != B.Dlist.get(x)) {
    return false;
} else {
    x+1;
}
if( x!= dList.size()) {
    recursion;
}

return true;

Upvotes: 0

FuzzyJulz
FuzzyJulz

Reputation: 2874

I think that this is a pretty good start for you. This looks through all your elements, assuming they are an array, and then checks if they are equal in size.

public boolean isEqual(ArrayList<?> a, ArrayList<?> b) {
    if (a.size() != b.size())
        return false;

    for (int i = 0; i < a.size(); i++) {
        if (!isEqual((ArrayList<?>)a.get(i), (ArrayList<?>)b.get(i))) {
            return false;
        }
    }
    return true;
}

Now a couple of things to consider:

  • This assumes that the content of a(and b) must be an ArrayList at line (ArrayList<?>)a.get(i) what if our ArrayList actually contains something else, like an Integer?

  • What if our array lists contain null as an item?

  • What if we pass in two null ArrayLists? (or even just one?)

I'm not sure the point of your function lessThanOrEqualTo(B) is this part of the question or did you write this down wrong?

Also what is a DList?

Upvotes: 0

Stephen C
Stephen C

Reputation: 718906

I have some code that I would like to make more efficient by recursion.

It is unlikely that you can make it more efficient by recursion. The chances are that it will be less efficient, and also fragile. This is because standard Java compilers don't implement tail-call optimization. The fragility occurs because a recursive comparison algorithm is liable to trigger a stack overflow if the input arrays are large enough.

However, if you want to continue with this as "an exercise", then my HINT is to add an index argument to the isEqualRecursion signature ...

Upvotes: 2

Related Questions