Re: Map question
On Mon, 31 May 2010, laredotornado wrote:
I'm using Java 6. The Javadocs suggest that Map uses containsKey,
Map can't use anything, because it's an interface. I will assume you are
talking about HashMap.
and hence an Object's equals method to determine if the object is
already a key in the map. However, I'm noticing that when I define this
equals method on an object I'm inserting as a key in my Map (a HashMap):
public boolean equals(Object obj) {
SearchResultHotels hotel = (SearchResultHotels) obj;
An aside: if someone passes in an object which is not a
SearchResultHotels, you need to return false; this will throw a
ClassCastException, which is wrong. A common opening to equals
implementations is:
if (obj == this) return true;
if ((obj == null) || !(obj instanceof SearchResultHotels)) return false;
SearchResultHotels hotel = (SearchResultHotels)obj;
Or code to that effect.
boolean ret = obj != null && ((SearchResultHotels) obj).getId() == getId();
log.debug("\t comparing " + hotel.getName() + " to " + getName() + ":" + ret);
return ret;
}
I never see my log statement printed out when I call "map.put". What
am I missing?
You don't show anywhere near enough code to answer that. Post the code
that makes the map and does the put.
Assuming you're talking about a situation like:
Map<SearchResultHotels, Object> m = new HashMap<SearchResultHotels, Object>();
SearchResultHotels hotel = somehowCreateSearchResultHotels();
m.put(hotel, "foo");
m.put(hotel, "bar");
Then i have a feeling HashMap checks for object identity (with ==) before
calling equals, as a defensive optimisation in case the key objects have
equals methods that do not efficiently detect identity.
Try doing a put with a different but equal key:
SearchResultHotels hotel = somehowCreateSearchResultHotels();
m.put(hotel, "foo");
SearchResultHotels equalHotel = somehowCreateSearchResultHotels();
m.put(equalHotel, "bar");
tom
--
Is this chill-out music for dangerous loners?