Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #18469

Re: Question about HashMap and Map.Entry ...

From Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at>
Newsgroups comp.lang.java.programmer
Subject Re: Question about HashMap and Map.Entry ...
Date 2012-08-31 10:26 +0000
Organization A noiseless patient Spider
Message-ID <slrnk414ac.u9l.avl@gamma.logic.tuwien.ac.at> (permalink)
References (3 earlier) <slrnk3vff3.u9l.avl@gamma.logic.tuwien.ac.at> <slrnk3vftg.u9l.avl@gamma.logic.tuwien.ac.at> <BKP%r.91$R_4.31@newsfe05.iad> <slrnk3vo9j.u9l.avl@gamma.logic.tuwien.ac.at> <aab0asF8ntU1@mid.individual.net>

Show all headers | View raw


Robert Klemme <shortcutter@googlemail.com> wrote:
> On 30.08.2012 23:55, Andreas Leitgeb wrote:
>> Daniel Pitts <newsgroup.nospam@virtualinfinity.net> wrote:
>>> Or, if you know all the keys before hand, you can use instead
>>>  Map<Long,MyLongWrapper> map.
>>> MyLongWrapper would have .set() and .get(), or even .actUpon()
>>> depending on the semantics you need.

My code now looks essentially like this: (containing class omitted)

  void doSomething() {
     // Val could be a static nested or a toplevel class, as well
     //  I've got it here for local context. I'd separate it out
     //  only if profiling results suggested doing so. ;-)
     final class Val {
        private long val=0; long getVal() { return val; }
        void actUpon(long arg) { val = some_formula_on_val_and_arg; }
     }
     Map<Long,Val> map = new HashMap<Long,Val>()
     for (Long key : listOfInterestingKeys) { map.put(key,new Val()); }

     // the main iteration: (each foo has two keys and a value)
     for (Foo foo : fooCollection) { Val fw;
        fw=map.get( foo.key1 ); if (fw != null) fw.actUpon(foo.value);
        fw=map.get( foo.key2 ); if (fw != null) fw.actUpon(foo.value);
        // plus some more stuff using also the "uninteresting" keys.
     }
     for (Map.Entry<Long,Val> me : map.entrySet() ) {
        doSomething(me.getKey(),me.getValue().getVal());
     }
  }

Again: thanks, Daniel Pitts, for pointing me the right direction
with a mutable value-wrapper class, instead of some Entry-alike!

> containsKey() is unnecessary work.  Just get(), and if it's null [...]

Was indeed. And my action for null happened to be "ignore".

> Btw, if you use long as member instead of Long then you do not even
> necessarily have more objects.

While that happened to apply to my case, it wasn't really a primary concern.

Back to comp.lang.java.programmer | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Question about HashMap and Map.Entry ... Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2012-08-30 17:39 +0000
  Re: Question about HashMap and Map.Entry ... markspace <-@.> - 2012-08-30 10:46 -0700
    Re: Question about HashMap and Map.Entry ... Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2012-08-30 11:15 -0700
      Re: Question about HashMap and Map.Entry ... Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2012-08-30 19:24 +0000
        Re: Question about HashMap and Map.Entry ... Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2012-08-30 19:32 +0000
          Re: Question about HashMap and Map.Entry ... Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2012-08-30 13:08 -0700
            Re: Question about HashMap and Map.Entry ... Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2012-08-30 21:55 +0000
              Re: Question about HashMap and Map.Entry ... Robert Klemme <shortcutter@googlemail.com> - 2012-08-31 07:27 +0200
                Re: Question about HashMap and Map.Entry ... Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2012-08-31 10:26 +0000
                Re: Question about HashMap and Map.Entry ... Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2012-08-31 11:22 -0700
                Re: Question about HashMap and Map.Entry ... Robert Klemme <shortcutter@googlemail.com> - 2012-09-01 11:06 +0200
        Re: Question about HashMap and Map.Entry ... markspace <-@.> - 2012-08-30 14:30 -0700
          Re: Question about HashMap and Map.Entry ... Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2012-08-30 22:42 +0000
        Re: Question about HashMap and Map.Entry ... markspace <-@.> - 2012-08-30 14:34 -0700
  Re: Question about HashMap and Map.Entry ... Lew <lewbloch@gmail.com> - 2012-08-30 13:42 -0700
    Re: Question about HashMap and Map.Entry ... Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2012-08-30 22:34 +0000

csiph-web