Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #19996
| Path | csiph.com!usenet.pasdenom.info!weretis.net!feeder4.news.weretis.net!eternal-september.org!feeder.eternal-september.org!mx04.eternal-september.org!.POSTED!not-for-mail |
|---|---|
| From | Eric Sosman <esosman@comcast-dot-net.invalid> |
| Newsgroups | comp.lang.java.programmer |
| Subject | Re: optimsed HashMap |
| Date | Tue, 27 Nov 2012 08:56:07 -0500 |
| Organization | A noiseless patient Spider |
| Lines | 50 |
| Message-ID | <k92gpu$2ah$1@dont-email.me> (permalink) |
| References | <8i70b8d0pm6ibk03ti4t2pv60jd0bctlcs@4ax.com> <b9Tss.19809$W21.10542@newsfe27.iad> <k914ve$kl4$1@dont-email.me> <jc0ts.12172$v83.1077@newsfe09.iad> |
| Mime-Version | 1.0 |
| Content-Type | text/plain; charset=ISO-8859-1; format=flowed |
| Content-Transfer-Encoding | 7bit |
| Injection-Date | Tue, 27 Nov 2012 13:56:14 +0000 (UTC) |
| Injection-Info | mx04.eternal-september.org; posting-host="ffb8f7085759b339c1002252b48331a4"; logging-data="2385"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/Do5dIeEosR5YNG0ptH1jH" |
| User-Agent | Mozilla/5.0 (Windows NT 5.1; rv:17.0) Gecko/17.0 Thunderbird/17.0 |
| In-Reply-To | <jc0ts.12172$v83.1077@newsfe09.iad> |
| Cancel-Lock | sha1:sWqlpxaVL94uB6yVM6MswRHYWY4= |
| Xref | csiph.com comp.lang.java.programmer:19996 |
Show key headers only | View raw
On 11/27/2012 5:01 AM, Arved Sandstrom wrote:
> On 11/26/2012 09:28 PM, Eric Sosman wrote:
>> On 11/26/2012 6:44 PM, Daniel Pitts wrote:
>>>
>>> I don't think your use-case needs this kind of (read "micro")
>>> optimization. However, I have often wished for a way to get a Map.Entry
>>> for a key, which could then be used to insert a new value efficiently.
>>>
>>> Map.Entry<K,V> getOrAddEntry(K key);
>>>
>>> Map.Entry<K,V> e = map.getOrAddEntry(myKey);
>>> if (e.getValue() == null) {
>>> e.setValue(newValue(myKey));
>>> }
>>> useValue(e.getValue());
>>>
>>> Alas, not exactly possible to add it now.
>>
>> java.util.concurrent.ConcurrentMap has putIfAbsent().
>>
> It's almost certainly a reflection (no pun intended) of what I do with
> Maps, but a common variant use case for me is
>
> putEmptyListAndAddValueToListIfAbsent
>
> I don't normally use ConcurrentHashMap so the usual idiom for me is a
> contains() check that may put() the new empty list as a value,
> afterwards the list (empty or otherwise) is always got, and the actual
> value added to it.
I usually write it as
List<V> list = map.get(key);
if (list == null) {
list = new SomeKindOfList();
map.put(key, list);
}
list.add(newValue);
... which involves one extra lookup per mapped key, not one
extra lookup per query.
The imaginary getOrAddEntry() would be nice, although it
might complicate the Map.Entry interface itself (you'd want a
way to distinguish "This key maps to null" from "This key is
newly entered").
--
Eric Sosman
esosman@comcast-dot-net.invalid
Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
optimsed HashMap Roedy Green <see_website@mindprod.com.invalid> - 2012-11-23 17:12 -0800
Re: optimsed HashMap Arne Vajhøj <arne@vajhoej.dk> - 2012-11-23 20:19 -0500
Re: optimsed HashMap markspace <-@.> - 2012-11-23 17:33 -0800
Re: optimsed HashMap Roedy Green <see_website@mindprod.com.invalid> - 2012-11-23 22:42 -0800
Re: optimsed HashMap Roedy Green <see_website@mindprod.com.invalid> - 2012-11-24 03:34 -0800
Re: optimsed HashMap Knute Johnson <nospam@knutejohnson.com> - 2012-11-24 08:39 -0800
Re: optimsed HashMap Knute Johnson <nospam@rabbitbrush.frazmtn.com> - 2012-11-24 15:14 -0800
Re: optimsed HashMap Arne Vajhøj <arne@vajhoej.dk> - 2012-11-24 13:24 -0500
Re: optimsed HashMap markspace <-@.> - 2012-11-24 10:44 -0800
Re: optimsed HashMap "Chris Uppal" <chris.uppal@metagnostic.REMOVE-THIS.org> - 2012-11-25 13:40 +0000
Re: optimsed HashMap Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid> - 2012-11-26 22:03 +0100
Re: optimsed HashMap Robert Klemme <shortcutter@googlemail.com> - 2012-11-26 23:32 +0100
Re: optimsed HashMap Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid> - 2012-11-27 03:24 +0100
Re: optimsed HashMap Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid> - 2012-11-27 03:35 +0100
Re: optimsed HashMap Eric Sosman <esosman@comcast-dot-net.invalid> - 2012-11-27 08:44 -0500
Re: optimsed HashMap Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2012-11-27 14:20 -0800
Re: optimsed HashMap Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid> - 2012-11-30 03:35 +0100
Re: optimsed HashMap Patricia Shanahan <pats@acm.org> - 2012-11-23 19:51 -0800
Re: optimsed HashMap "Chris Uppal" <chris.uppal@metagnostic.REMOVE-THIS.org> - 2012-11-24 10:21 +0000
Re: optimsed HashMap Roedy Green <see_website@mindprod.com.invalid> - 2012-11-24 03:39 -0800
Re: optimsed HashMap Robert Klemme <shortcutter@googlemail.com> - 2012-11-24 16:24 +0100
Re: optimsed HashMap "Chris Uppal" <chris.uppal@metagnostic.REMOVE-THIS.org> - 2012-11-25 13:50 +0000
Re: optimsed HashMap Robert Klemme <shortcutter@googlemail.com> - 2012-11-25 15:30 +0100
Re: optimsed HashMap "Chris Uppal" <chris.uppal@metagnostic.REMOVE-THIS.org> - 2012-11-26 21:13 +0000
Re: optimsed HashMap Arne Vajhøj <arne@vajhoej.dk> - 2012-11-24 13:16 -0500
Re: optimsed HashMap v_borchert@despammed.com (Volker Borchert) - 2012-11-24 08:05 +0000
Re: optimsed HashMap Silvio <silvio@internet.com> - 2012-11-26 11:57 +0100
Re: optimsed HashMap Jim Janney <jjanney@shell.xmission.com> - 2012-11-26 11:13 -0700
Re: optimsed HashMap Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2012-11-26 15:44 -0800
Re: optimsed HashMap Eric Sosman <esosman@comcast-dot-net.invalid> - 2012-11-26 20:28 -0500
Re: optimsed HashMap Arved Sandstrom <asandstrom2@eastlink.ca> - 2012-11-27 06:01 -0400
Re: optimsed HashMap Eric Sosman <esosman@comcast-dot-net.invalid> - 2012-11-27 08:56 -0500
Re: optimsed HashMap Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2012-11-27 14:16 -0800
csiph-web