commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Nikhil G. Daddikar (JIRA)" <>
Subject [jira] Commented: (COLLECTIONS-250) containsKey on MultiHashMap seems incorrect
Date Mon, 30 Apr 2007 10:37:15 GMT


Nikhil G. Daddikar commented on COLLECTIONS-250:

It's not changed, my mistake. 

Just as in a regular map that containsKey(key) is not equivalent to getValue(key) != null,
i.e. after doing a put(key, null), containsKey(key), still returns true, I am expecting something
similar. I find it wierd that after doing a putAll(key, LIST), containsKey(key) returns FALSE,
it should return an empty list. 

My problem is this (maybe this is not to be discussed here, but I think it is appropriate
at least to put the problem forward): I use MultiHashMap (MHM) for caching database results
of 1-to-many relationships. Let's say its is a PERSON borrowed BOOKS relation. So, I do one
SQL query to fetch all the books for many (not all) persons and then populate the MHM cache
(SELECT book_id from BorrowedBooks where person_id in (id1, id2, id3...)). After populating,
the MHM has person1->books borrowed by person1, person2->books borrwed by person2 etc.
Now, a query comes asking for books borrowed by personX. Since there is no way of asking the
MHM whether "this key has no entries", if I don't find the personX's key in the MHM, it is
unclear if the caching query had fetched personX's id in the original query. If there was
a way, of maintaining empty collections in the MHM, then this problem can be solved. 

Also there is no way to put an empty list for a key which I could have used as  workaround.

> containsKey on MultiHashMap seems incorrect
> -------------------------------------------
>                 Key: COLLECTIONS-250
>                 URL:
>             Project: Commons Collections
>          Issue Type: Bug
>          Components: Map
>    Affects Versions: 3.1, 3.2
>            Reporter: Nikhil G. Daddikar
>            Priority: Critical
> MultiHashMap m = new MultiHashMap();
> m.putAll("key", Collections.EMPTY_LIST);
> System.out.println(m.containsKey("key")) 
> It says false, when it should have printed true. 
> The problem is that the code in MultiHashMap and even MultiValueMap has in putAll():
> if (values == null || values.size() == 0) 
> {
>             return false;
> }
> This means that they key is never being entered into the Map. This is causing a huge
problem because the behaviour has changed.

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message