Java ArrayList equals method

Started by
5 comments, last by Lothia 16 years, 7 months ago
Hello, I am having trouble creating a equals method that works for my ArrayList, I know that Arraylist has a built in equals method as well as a few other useful tools. But the problem is that those equal methods compare the memory locations and I want it to compare the actual data. I am making a shopping cart who is created with a quantity and grocery cart and each of those is created with one item type class. I need to make an equals method in mt grocery cart class that can take my Arraylist<grocey cart> and compare it to another. Pretty much I am having an array list to hold items, but if some one wants to change an item that is already in the grocey cart then I need to be able to search through my array list and find that position and change it. This is not the main function but another class itself. If any one can help that would be great. I would like to put up the code but I believe it is to large to actually help. I am making the equals method as a boolean and send in an object, how ever i do not know how to make it compare another same type object. I only get one getter class which gets the item within the specific grocery cart. Any help would be great :). If coding is required then I will post it. I know I have to a hashCode() to overwrite the equals(); method but that still doesn't help me from not comparing memory locations. and I still don't exactly know why its required.
Advertisement
You want to compare a list *of* grocery carts to another list? What does it mean for the two lists to be equal?

Or are you trying to compare two grocery carts, each of which contains a list of groceries?
No I want to compare a list of grocery items to a single grocery item. The reason i need to check is because if they are equals it means that the item has already been added to the grocery cart so the new one needs to over ride the old one. And just an equals method would find 2 different memory locations.
Can't you make an equals method on the grocery item itself that does the proper test against another grocery? Then wouldn't ArrayList use that equals? I don't know java very well, but it seems like it should be possible.
Sounds to me what you are actually needing is a Comparator interface implementation. If you Google for that you should find plenty of examples that should help you code what you need.

The long way of doing it would be to iterate through the ArrayList and pull out each item, then see if it matches. Something like this:

GroceryItem testItem = someItem;Iterator it = groceryCart.iterator();while (it.hasNext()){ GroceryItem item = (GroceryItem)it.next(); if (item.getID() == testItem.getID())  // already in cart, increment by 1 else  // add item}

[edit - used Java code tag]
Check out my current project on Kickstarter: Genegrafter
Quote:Original post by Lothia
No I want to compare a list of grocery items to a single grocery item. The reason i need to check is because if they are equals it means that the item has already been added to the grocery cart so the new one needs to over ride the old one.


That isn't checking for equality. Of course a list of grocery items won't ever be equal to any particular grocery item, because it isn't even the same kind of thing - it's a list, whereas the item is an item.

What you apparently actually want to check is if the grocery item is in the list. That's nothing to do with equality.

Try the .contains() member function of the list.

If that doesn't do what you want (since it's checking object identity rather than equality IIRC), just loop through all elements of the list and see if any of them .equals() your "target" item. But you really should consider improving your understanding of object identity vs. object equality, and of value objects vs. reference objects.
Okay so I should not send in the whole arraylist but rather send each item one by one into it. And then check, I will update you on my progress thank you for the help :).
I hate CCleaner, I used it on my vista.... destroyed the OS, Mcafee, and about 4 other programs since then Mcafee still isn't working right. Reinstalled Vista too. Well thank you again :)

This topic is closed to new replies.

Advertisement